Official

C - Doubled Editorial by tatyam


\(N < 10^{12}\) という制約なので、\(1\) 以上 \(N\) 以下の全ての整数について、繰り返しになっているか判定すると TLE になってしまいます。
しかし、繰り返される整数の側は高々 \(6\) 桁であるため、繰り返される整数を全探索することができます。
時間計算量は \(O(\sqrt N)\) です。

その他、繰り返される整数を二分探索すれば \(O(\log N)\) で、二分探索せずとも \(O(1)\) で求めることができます。

回答例 (C++)

#include <iostream>
#include <string>
using namespace std;
using ll = long long;

int main(){
    ll N;
    cin >> N;
    for(ll i = 1; ; i++) if(stoll(to_string(i) + to_string(i)) > N){
        cout << i - 1 << endl;
        return 0;
    }
}

回答例 (Python)

N = int(input())
for i in range(1, 1000001):
    if int(str(i) * 2) > N:
        print(i - 1)
        exit()

posted:
last update: