結果
問題 | No.528 10^9と10^9+7と回文 |
ユーザー |
![]() |
提出日時 | 2019-02-23 12:55:51 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,438 bytes |
コンパイル時間 | 920 ms |
コンパイル使用メモリ | 101,136 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-29 15:08:38 |
合計ジャッジ時間 | 3,054 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 WA * 5 |
ソースコード
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#include <string>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <map>#include <set>#include <unordered_map>#include <unordered_set>#include <functional>#include <cassert>typedef long long ll;using namespace std;#define debug(x) cerr << #x << " = " << (x) << endl;#define mod 1000000007 //1e9+7(prime number)#define INF 1000000000 //1e9#define LLINF 2000000000000000000LL //2e18#define SIZE 100010#define int long longll power(int k,int n,int M){if(n==0) return 1;if(n==1) return (ll)k;ll ret = power(k,n/2,M);ret=(ret*ret)%M;if(n%2==1) ret=(ret*k)%M;return ret;}signed main(){string s;int n;cin >> s;n = s.size();ll ans0 = 0, ans7 = 0;for(int i=1;i<n;i++){if(i == 1){ans0 += 9;ans7 += 9;}else if(i%2){ans0 += 10 * 9 * power(10, i/2-1, 1000000000);ans0 %= 1000000000;ans7 += 10 * 9 * power(10, i/2-1, mod);ans7 %= mod;}else{ans0 += 9 * power(10, i/2-1, 1000000000);ans0 %= 1000000000;ans7 += 9 * power(10, i/2-1, mod);ans7 %= mod;}}string s_sub = s.substr(0, n/2);string s_sub_r = s_sub;string s_sub2 = s.substr((n+1)/2,n/2);string s_sub2_r = s_sub2;reverse(s_sub_r.begin(),s_sub_r.end());reverse(s_sub2_r.begin(),s_sub2_r.end());int e = 0;if(s_sub.size() == 0){e = stoi(s);}else{if(s_sub_r <= s_sub2){if(n%2){if(s_sub2 == s_sub_r){e = s[n/2] - '0' + 1;}else{e = 10;}}else{e = 1;}}else{e = 0;}}ll r0 = 0, r7 = 0;bool f = s_sub.size() && s_sub[0] == '1';for(int i=1;i<s_sub.size();i++){f &= s_sub[i] == '0';}if(!f && s_sub.size()){for(int i=0;i<s_sub.size();i++){r0 = (r0 * 10)%1000000000;r7 = (r7 * 10)%mod;r0 += s_sub[i] - '0' - (i==0);r7 += s_sub[i] - '0' - (i==0);}if(n%2){r0 = (r0 * 10 + 1000000000)%1000000000;r7 = (r7 * 10 + mod)%mod;}}debug(s_sub);debug(s_sub_r);debug(ans0);debug(ans7);debug(r0);debug(r7);debug(e);ans0 = (ans0 + r0 + e)%1000000000;ans7 = (ans7 + r7 + e)%mod;cout << ans0 << '\n' << ans7 << endl;return 0;}