AtCoder Beginner Contest 196 C - Doubled
問題
整数Nが与えられます。 以下の条件を満たす1以上N以下の整数xは何個あるでしょうか? * xの十進表記(先頭に0を付けない)は偶数桁であり、その前半と後半は文字列として等しい。
制約
- Nは整数
考えたこと
前半と後半にわけてそれぞれ作ってみようと思いました。
コード
#define _GIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) #define all(v) v.begin(), v.end() using namespace std; using ll = long long; int main(void) { string N; cin >> N; if (stoll(N) < 11) { cout << 0 << endl; return 0; } ll ans = 0; if (N.length() % 2 != 0) { string n; rep(i, N.length() - 1) { n.push_back('9'); } N = n; } string l = N.substr(0, N.length() / 2); string r = N.substr(N.length() / 2); ll numl = stoll(l); ll numr = stoll(r); if (numl <= numr) ans = numl; else ans = numl - 1; cout << ans << endl; return 0; }
解説を読んで
全探索でいいとは…。