結果
問題 | No.528 10^9と10^9+7と回文 |
ユーザー | goodbaton |
提出日時 | 2019-02-23 12:55:51 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,820 KB |
testcase_01 | AC | 2 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 2 ms
6,816 KB |
testcase_04 | AC | 2 ms
6,820 KB |
testcase_05 | AC | 2 ms
6,816 KB |
testcase_06 | AC | 2 ms
6,820 KB |
testcase_07 | AC | 2 ms
6,820 KB |
testcase_08 | AC | 2 ms
6,820 KB |
testcase_09 | AC | 2 ms
6,816 KB |
testcase_10 | AC | 74 ms
6,816 KB |
testcase_11 | AC | 74 ms
6,816 KB |
testcase_12 | AC | 74 ms
6,816 KB |
testcase_13 | AC | 74 ms
6,816 KB |
testcase_14 | WA | - |
testcase_15 | AC | 37 ms
6,816 KB |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | AC | 70 ms
6,820 KB |
testcase_19 | WA | - |
testcase_20 | WA | - |
testcase_21 | AC | 28 ms
6,820 KB |
testcase_22 | AC | 2 ms
6,816 KB |
testcase_23 | AC | 2 ms
6,816 KB |
testcase_24 | AC | 3 ms
6,816 KB |
testcase_25 | AC | 7 ms
6,816 KB |
testcase_26 | AC | 73 ms
6,820 KB |
testcase_27 | AC | 73 ms
6,816 KB |
ソースコード
#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 long 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; } 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; }