東大卒メーカー勤務がゆるっとセミリタイアを目指す

東大卒でメーカー勤務の私がセミリタイアするために考えたことや日々思うことをゆるっと書いていくブログです。独身男性です。お金の大切さや今後の生き方について伝えていけたらと思います。

ABC158で書いたコード

using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace Atcoder20190616
{
    class ProgramA
    {
        static void Main(string args)
        {
            //入力
            string n = Console.ReadLine();


            //全部同じならNo、それ以外はYes
            if(n[0] == n[1] && n[1] == n[2])
                Console.WriteLine("No");
            else
                Console.WriteLine("Yes");
        }
    }

    class ProgramB
    {
        static void Main(string args)
        {
            
            //入力
            string input = Console.ReadLine().Split(' ');
            long n = long.Parse(input[0]);
            long a = long.Parse(input[1]);
            long b = long.Parse(input[2]);


            //繰り返しの数を出す。
            long num = n / (a+b);
            //余りの数を出す
            long res = n - (a+b)* num;
            //余りの数がaより小さいなら余りの数を足して、それ以外はa個足して出す。
            if(res > a)
                Console.WriteLine(num * a + a);
            else
                Console.WriteLine(num * a + res);
    
        }
    }

    class ProgramC
    {
        static void Main(string args)
        {
            
            //入力
            string input = Console.ReadLine().Split(' ');
            int a = int.Parse(input[0]);
            int b = int.Parse(input[1]);
            
            int min = 0;
            int max = 1250;//最大値は1250
            int temp = 0;
            
            //二分探索法。
            while(max != min + 1)
            {
                //とりあえず真ん中の数でそれより大きいか小さいかを探す
                temp = (max + min) /2;
                
                //実際の金額を求めて、満たすなら最小、満たさないなら最大にする
                if((int)(temp * 0.08) < a || (int)(temp * 0.1) < b)
                    min = temp;
                else
                    max = temp;

            }
            
            //両方満たすなら答えを出す。それ以外はあり得ないのでだす。
            if((int)(max * 0.08) == a || (int)(max * 0.1) == b)
                Console.WriteLine(max);
            else
                Console.WriteLine("-1");
        } 
    }  

    class ProgramD
    {
        static void Main(string args)
        {
            
            //入力
            string s = Console.ReadLine();
        
            StringBuilder f = new StringBuilder();//前に入れる文字列
            StringBuilder l = new StringBuilder();//後ろに入れる文字列
            int n = int.Parse(Console.ReadLine());
            int flag = 0;

            for(int i = 0;i < n;i++)
            {
                //クエリの読み込み
                string[] temp = Console.ReadLine().Split(' ');

                if(int.Parse(temp[0]) == 1)
                {//クエリ1の処理、反転しているかどうかをflagで監視
                    if(flag == 1)
                        flag = 0;
                    else
                        flag = 1;
                }
                else
                {//クエリ2の処理、反転しているかどうかで追加する文字列を変える
                    if(flag == 1)
                    {
                        //反転しているなら追加する方を逆にする
                        if(int.Parse(temp[1]) == 2)
                            f.Append(temp[2]);
                        else
                            l.Append(temp[2]);

                    }
                    else
                    {
                        //反転してないなら普通に追加
                        if(int.Parse(temp[1]) == 1)
                            f.Append(temp[2]);
                        else
                            l.Append(temp[2]);
                    }
                }

            }

            //全部の文字列を足す
            string s2 =  new string(f.ToString().Reverse().ToArray())+ s + l.ToString();
            //もし反転判定しているなら反転する
            if(flag == 1)
            {
                string t = s2.Reverse();
                s2 = string.Join("",t);
            }
            
            //答え出力
            Console.WriteLine(s2);
            
        }
    }

}