結果
問題 | No.1842 Decimal Point |
ユーザー | highlighter |
提出日時 | 2023-10-15 20:45:32 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,561 bytes |
コンパイル時間 | 4,644 ms |
コンパイル使用メモリ | 247,260 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-16 22:06:56 |
合計ジャッジ時間 | 6,588 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | WA | - |
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long int mod1=1073741824; int mod2=1220703125; int power(int a,int b,int mod){ if(mod==-1){ vector<int> data(62); data[0]=a; for(int i=1;i<62;i++){ data[i]=data[i-1]*data[i-1]; } bitset<62> x(b); int ans=1; for(int i=0;i<62;i++){ if(x[i]==1){ ans*=data[i]; } } return ans; } vector<int> data(62); data[0]=a%mod; for(int i=1;i<62;i++){ data[i]=data[i-1]*data[i-1]%mod; } bitset<62> x(b); int ans=1; for(int i=0;i<62;i++){ if(x[i]==1){ ans*=data[i]; ans%=mod; } } return ans; } int inverse(int a,int m) { int b = m, u = 1, v = 0; while (b) { int t = a / b; a-=t*b; swap(a, b); u-=t*v; swap(u, v); } u%=m; if (u < 0) u += m; return u; } signed main() { int T; cin >> T; for(;T--;){ int A,B,C; cin >> A >> B >> C; int bunshi1=A%mod1*power(10,C,mod1)%mod1-(A%B*power(10,C,B)%B)%mod1; bunshi1%=mod1; if(bunshi1<0){ bunshi1+=mod1; } int b_1=0; int B_sub=B; while(B_sub%2==0){ B_sub/=2; b_1++; } bunshi1>>=b_1; int inv_1=inverse(B_sub,mod1); int ans_1=inv_1*bunshi1%2; int bunshi2=A%mod2*power(10,C,mod2)%mod2-(A%B*power(10,C,B)%B)%mod2; bunshi2%=mod2; if(bunshi2<0){ bunshi2+=mod2; } int b_2=0; B_sub=B; while(B_sub%5==0){ B_sub/=5; b_2++; } bunshi1/=power(5,b_2,-1); int inv_2=inverse(B_sub,mod2); int ans_2=inv_2*bunshi2%5; for(int i=0;i<10;i++){ if(i%2==ans_1 && i%5==ans_2){ cout << i << endl; break; } } } }