トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ARC-057-A 2兆円

■■■問題■■■

高橋君は2兆円が欲しいです。
高橋君の現在の所持金はA円であり、ある日に高橋君がt円を持っているなら
その翌日には 高橋君の所持金は 1+Kt 円増加します。

高橋君の所持金がはじめて2兆円以上になるのは何日後でしょうか。

■■■入力■■■

A K

●0 <= A < 2兆
●0 <= K <= 100万
●入力はすべて整数である

■■■出力■■■

高橋君の所持金がはじめて2兆円以上になるまでにかかる日数を一行に出力せよ。


C#のソース

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

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("1000 300");
            //4
            //高橋君の所持金は、
            //1日後に       301001円、
            //2日後に     90601302円、
            //3日後に  27270991903円、
            //4日後に8208568562804円になります。
            //4日目で初めて所持金が2兆円を超えるので、4を出力します。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("6 2");
            //25
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("567876543 0");
            //1999432123457
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        long[] wkArr = InputList[0].Split(' ').Select(X => long.Parse(X)).ToArray();
        long A = wkArr[0];
        long K = wkArr[1];

        //1円増加する場合
        if (K == 0) {
            Console.WriteLine(2000000000000L - A);
            return;
        }

        long Answer = 0;
        while (A < 2000000000000L) {
            Answer++;
            A += 1 + K * A;
        }
        Console.WriteLine(Answer);
    }
}


解説

Kが0かを判定して、アルゴリズムを分けてます。