トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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かを判定して、アルゴリズムを分けてます。