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

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

ABC154で書いたコード

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

namespace Atcoder20190616
{
    class ProgramA
    {
        static void Main(string args)
        {
            //入力
            string input = Console.ReadLine().Split(' ');
            string s = input[0];
            string t = input[1];
            string input2 = Console.ReadLine().Split(' ');
            int a = int.Parse(input2[0]);
            int b = int.Parse(input2[1]);
            string u = Console.ReadLine();

            //s=uならA-1で、s=tならB-1で答をだす。
            if(s == u)
                Console.WriteLine((a -1) + " "b);
            else
                Console.WriteLine(a + " "+ (b-1));
            
            
        }
    }

    class ProgramB
    {
        static void Main(string args)
        {
            
            //入力
            string input = Console.ReadLine();

            //文字数だけxを出す
            for(int i = 0;i < input.Length ;i++)
                Console.Write("x");
    
        }
    }

    class ProgramC
    {
        static void Main(string args)
        {
            
            //入力
            int n = int.Parse(Console.ReadLine());
            long a = new long[n];

            string input2 = Console.ReadLine().Split(' ');
            for(int i = 0;i < n;i++)
                a[i] = long.Parse(input2[i]);

            //小さい順にソートする
            Array.Sort(a);


            //隣同士を比較して同じならNO
            for(int i = 0;i < n - 1;i++)
            {
                if(a[i] == a[i + 1])
                {
                    Console.WriteLine("NO");
                    return;
                }
            }

            //すべて異なったらYES
            Console.WriteLine("YES");
        } 
    }   

    class ProgramD
    {
        static void Main(string args)
        {
            
            //入力
            string input = Console.ReadLine().Split(' ');
            int n = int.Parse(input[0]);
            int k = int.Parse(input[1]);
            double sum = 0.0;

            long a = new long[n];

            string input2 = Console.ReadLine().Split(' ');
            for(int i = 0;i < n;i++)
                a[i] = long.Parse(input2[i]);
            
            //まずは和を求める
            for(int i = 0i < k ;i++)
                sum += (double)(1.0 + (a[i] - 1) * 0.5);
            
            //答の仮候補
            double ans = sum;


            //i-kの期待値を引いて、iの期待値を足す
            for(int i = ki < n;i++)
            {
                sum -= (double)(1.0 + (a[i - k] - 1) * 0.5);//i-kの期待値
                sum += (double)(1.0 + (a[i] - 1) * 0.5);//iの期待値
                
                //もし最大なら更新
                if(sum > ans)
                    ans = sum;
            }


            //答え出力
            Console.WriteLine(sum);
        } 
    } 

    class ProgramE
    {
        static void Main(string args)
        {
            
            //入力
            string n = Console.ReadLine();
            int k = int.Parse(Console.ReadLine());

            int keta = n.Length;//桁数を求める
            int sum = 0;
            int frag = 0;//最高位以外の0以外の数が出たときの判定に使う

            for(int i = 0i < n.Lengthi++)
            {
                //桁の数代入
                int temp = n[i] -'0';
 
                if(k == 1)
                {
                    if(i == 0)
                        sum += temp;//最高位はその数を代入
                    else
                        sum += 9;//それ以外は9個足す
                }
                else if(k == 2)
                {
                    if(i == 0)
                        sum = (keta -1) * (temp -1) * 9;//最高位は(桁数-1)×(最高位数-1)×9
                    else
                        sum += (keta -1) * 81;//最高位は(桁数-1)×9×9
 
                    if(temp != 0 && frag == 1)//2つの目の0以外が出たら
                    {
                        sum += temp + (keta -1)* 9;
                        frag++;
                    }

                    if(i == 0)
                        frag++;
                        
 
                }
                else
                {
                    if(i == 0)
                        sum = (keta -1) * (keta -2) / 2 * (temp - 1) * 9 * 9;//最高位のとき
                    else
                        sum += (keta -1) * (keta -2) / 2 * 9*9*9//それ以外

                    if(temp != 0 && frag == 2)//3つ目の0じゃない数を出したとき(プログラム的にこの位置にないと破綻する)
                    {
                        sum += temp + (keta -1)*9;
                        frag++;
                    }
 
                    if(temp != 0 && frag == 1)//2つ目の0じゃない数を出したとき
                    {
                        sum += (temp -1) * (keta -1) * 9+ (keta -1)*(keta -2) / 2 * 9*9;
                        frag++;
                    }
 
                    
                    if(i == 0)
                        frag++;
                }

                //桁数は毎回減らす
                keta--;
 
            }
            //答え出力
            Console.WriteLine(sum);
            
        } 
    }
    
}