結果
問題 | No.528 10^9と10^9+7と回文 |
ユーザー | goodbaton |
提出日時 | 2017-06-11 00:13:54 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,403 bytes |
コンパイル時間 | 659 ms |
コンパイル使用メモリ | 91,380 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-24 15:47:28 |
合計ジャッジ時間 | 2,114 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 1 ms
6,944 KB |
testcase_02 | AC | 1 ms
6,944 KB |
testcase_03 | AC | 1 ms
6,940 KB |
testcase_04 | WA | - |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | WA | - |
testcase_19 | WA | - |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | WA | - |
testcase_25 | WA | - |
testcase_26 | WA | - |
testcase_27 | WA | - |
ソースコード
#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 ll 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; } int 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_sub == 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[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 - 9)%1000000000; r7 = (r7 * 10 + mod - 9)%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; }