結果
問題 | No.491 10^9+1と回文 |
ユーザー |
![]() |
提出日時 | 2017-03-10 23:35:50 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,088 bytes |
コンパイル時間 | 1,496 ms |
コンパイル使用メモリ | 168,200 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-24 08:54:58 |
合計ジャッジ時間 | 3,924 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 WA * 66 |
ソースコード
#include <bits/stdc++.h>#ifndef LOCAL_#define fprintf if( false ) fprintf#endif // LOCAL_#define dumpi(x1) fprintf(stderr, "#%s.%d (%s) = (%d)\n", __func__, __LINE__, #x1, x1);#define dumpii(x1, x2) fprintf(stderr, "#%s.%d (%s, %s) = (%d, %d)\n", __func__, __LINE__, #x1, #x2, x1, x2);#define dumpiii(x1, x2, x3) fprintf(stderr, "#%s.%d (%s, %s, %s) = (%d, %d, %d)\n", __func__, __LINE__, #x1, #x2, #x3, x1, x2, x3);#define dumpl(x1) fprintf(stderr, "#%s.%d (%s) = (%ld)\n", __func__, __LINE__, #x1, x1);#define dumpll(x1, x2) fprintf(stderr, "#%s.%d (%s, %s) = (%ld, %ld)\n", __func__, __LINE__, #x1, #x2, x1, x2);#define dumpd(x1) fprintf(stderr, "#%s.%d (%s) = (%lf)\n", __func__, __LINE__, #x1, x1);#define dumpdd(x1, x2) fprintf(stderr, "#%s.%d (%s, %s) = (%lf, %lf)\n", __func__, __LINE__, #x1, #x2, x1, x2);template<typename T>T pow(T x, long n) {T res = 1;T p = x;while( n != 0 ) {if( n & 0x01 ) res *= p;p *= p;n >>= 1;}return res;}// void greedy(long x) {// long t = 1000000001;// for(long i = t; i <= x; i+=t) {// if(// }// }long f(std::string str, int b, int n) {if( n == 0 ) return 0;if( n == 1 ) return str[b] - '0' + (b == 0 ? 0 : 1);long res = pow(10, n - 1) * std::max(0, str[b] - '0' - (b == 0 ? 1 : -1)) + f(str, b + 1, n - 1);dumpl(res);return res;}int main() {long dp[32] = {};// dp[1] = 9;// dp[2] = 9;// dp[3] = 9 * 10;// dp[4] = 9 * 10;// dp[5] = 9 * 10 * 10;for(int i = 0; i < 32; ++i) {dp[i] = 9 * pow(10, (i-1)/2);}std::string str;std::cin >> str;long t = std::stol(str);long low = t % 1000000000;long high = t / 1000000000;long m = (int)str.size() - 9;long x = f(str, 0, (m + 1) / 2);dumpl(m);// long x = 0;for(int i = 0; i < m - 1; ++i) {x += dp[i];}// for(int i = 1; i < m; ++i) {// x += dp[i];// }// x += (str[0] - '0') * pow(10, std::max((long)0, (m - 1)/2));int res = t < 1000000001 ? 0 : x;if( high > low ) res = std::max(0, res - 1);printf("%d\n", res);return 0;}