AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC106-C To Infinity
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("1214");
WillReturn.Add("4");
//2
}
else if (InputPattern == "Input2") {
WillReturn.Add("3");
WillReturn.Add("157");
//3
}
else if (InputPattern == "Input3") {
WillReturn.Add("299792458");
WillReturn.Add("9460730472580800");
//2
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[0];
long K = long.Parse(InputList[1]);
// 先頭からの1の長さ
int SeqOneLength = 0;
// 最初の1以外の数字
char NonOneChar = '\0';
for (int I = 0; I <= S.Length - 1; I++) {
if (S[I] == '1') {
SeqOneLength++;
}
else {
NonOneChar = S[I];
break;
}
}
if (K <= SeqOneLength) {
Console.WriteLine(1);
}
else {
Console.WriteLine(NonOneChar);
}
}
}
解説
2は
1日後に22
2日後に2222
3日後に22222222
で5000兆日後には、
2の5000兆乗を超える長さになり
Kは、制約により、10の18乗以下であり、
5000兆*log(2) > 18*log(10) なので、
Kが最初の文字列Sの先頭から1が連続した区間以下なら、解は1
Kが最初の文字列Sの先頭から1が連続した区間より先なら、最初の1以外の数字が解
となります。