結果
問題 | No.528 10^9と10^9+7と回文 |
ユーザー |
|
提出日時 | 2017-06-10 00:28:15 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 38 ms / 1,000 ms |
コード長 | 1,850 bytes |
コンパイル時間 | 972 ms |
コンパイル使用メモリ | 106,156 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-23 18:30:57 |
合計ジャッジ時間 | 2,217 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 28 |
ソースコード
#define _USE_MATH_DEFINES#include <cstdio>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <algorithm>#include <cmath>#include <complex>#include <string>#include <vector>#include <list>#include <queue>#include <stack>#include <set>#include <map>#include <bitset>#include <numeric>#include <limits>#include <climits>#include <cfloat>#include <functional>#include <iterator>using namespace std;int solve(const string& s, int mod){int n = s.size();long long ans = 0;long long tmp = 9;for(int i=1; i<n; ++i){ans += tmp;ans %= mod;if(i % 2 == 0){tmp *= 10;tmp %= mod;}}vector<int> dp(4, 0);dp[2] = 1;for(int i=0; i<(n+1)/2; ++i){vector<int> nextDp(4, 0);for(int a=0; a<4; ++a){for(int x=0; x<=9; ++x){if(i == 0 && x == 0)continue;if((a & 2) && x > s[i] - '0')continue;int b = a;if(x < s[i] - '0')b &= ~2;if(x < s[n-1-i] - '0')b &= ~1;else if(x > s[n-1-i] - '0')b |= 1;nextDp[b] += dp[a];nextDp[b] %= mod;}}dp.swap(nextDp);}for(int i=0; i<3; ++i){ans += dp[i];ans %= mod;}return ans;}int solve(int n){int ans = 0;for(int i=1; i<=n; ++i){string s = to_string(i);string t = s;reverse(t.begin(), t.end());if(s == t)++ ans;}return ans;}int main(){string s;cin >> s;cout << solve(s, 1000000000) << endl<< solve(s, 1000000007) << endl;return 0;}