競プロをしながら、節約と株式投資でセミリタイアを目指す東大卒のブログ

東大卒でメーカー勤務の私がセミリタイアするために投資や競プロを頑張っていこうという趣旨で始めたブログです。独身男性です。火木土日に更新予定です。お金について考えています。

キーエンスコンテストで書いたコード

using System;
using System.Linq;
using System.Collections.Generic;

namespace Atcoder20190616
{
    class ProgramA
    {
        static void Main(string args)
        {
            //日付を入力する
            int h = int.Parse(Console.ReadLine());
            int w = int.Parse(Console.ReadLine());
            int n = int.Parse(Console.ReadLine());


            //hとwの大小を比較して、おおきい方で塗っていく。割り切れるときと割り切れないときで回数が違うので場合分け
            if(h > w)
            {
                if(n % h == 0)
                    Console.WriteLine(n / h);
                else
                    Console.WriteLine(n / h + 1);
            }
            else
            {
                if(n % w == 0)
                    Console.WriteLine(n / w);
                else
                    Console.WriteLine(n / w + 1);
            }
            
        }
    }

    class ProgramB
    {
        static void Main(string args)
        {
            
            //入力
            int n = int.Parse(Console.ReadLine());
            
            int pos = new int[n];
            int l = new int[n];
            List<Tasktasknew List<Task>();


            //値を代入する
            for(int i = 0;i < n;i++)
            {
                string input = Console.ReadLine().Split(' ');
                pos[i] = int.Parse(input[0]);
                l[i] = int.Parse(input[1]);
                task.Add(new Task(pos[i], l[i]));
            }

            //ソートする
            IOrderedEnumerable<Tasksorted = task.OrderBy(x => x.a);


            //それぞれ並び替え後に代入しなおす
            int z = 0;
            foreach(Task s in sorted)
            {
                pos[z] = s.a;
                l[z] = s.order;
                z++;
            }

            //貪欲法で取り除くか検討する
            int temp = 0;
            int temp2 = pos[0] + l[0];
            int k = 0;
            int count = 0;

            //ロボットの一番おおきい座標と次に追加するロボットの最小値を比較して判断
            for(int i = 1;i < n;i++)
            {
                temp = pos[i] - l[i];
                if(temp < temp2)//もし被っているならロボットを取り除く
                {
                    count++;
                    if(temp2 >= pos[i] + l[i])//追加したロボットの方が占有する座標が小さいときはロボットの最大座標を更新する
                    {
                        temp2 = pos[i] + l[i];
                    }
                }
                else//被らないなら追加ロボットの最大座標で更新
                {
                    temp2 = pos[i] + l[i];
                }
                
            }

            //答は取り除いたロボットを引く
            Console.WriteLine(n - count);
    
        }
    }

    //2つの数値を連動させて記録するためのTaskクラス
    public class Task
    {
        public int order;
        public int a;
        public Task(int aint order)
        {
            this.a = a;
            this.order = order;
        }
    }

    class ProgramC
    {
        static void Main(string args)
        {
            
            //入力
            string[] input = Console.ReadLine().Split(' ');
            int n = int.Parse(input[0]);
            int k = int.Parse(input[1]);
            int s = int.Parse(input[2]);
            
            //s =  1000000000以外ならkこsでそれ以外はs+1, s =1000000000ならkこsでそれ以外は1
            for(int i = 0;i < n;i++)
            {
                if(s == 1000000000)
                {
                    if(i < k)
                        Console.Write(s);
                    else
                        Console.Write('1');
                }
                else
                {
                    if(i < k)
                        Console.Write(s);
                    else
                        Console.Write(s+1);
                }
                
                Console.Write(' ');
                
            
            }
          
        } 
    }       
}