結果
問題 | No.491 10^9+1と回文 |
ユーザー |
![]() |
提出日時 | 2017-03-10 23:24:13 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,033 bytes |
コンパイル時間 | 1,848 ms |
コンパイル使用メモリ | 168,656 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-24 08:42:48 |
合計ジャッジ時間 | 3,829 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | AC * 26 WA * 77 |
ソースコード
#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;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;}