結果
| 問題 |
No.1842 Decimal Point
|
| コンテスト | |
| ユーザー |
highlighter
|
| 提出日時 | 2023-10-15 20:51:02 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 751 ms / 2,000 ms |
| コード長 | 1,550 bytes |
| コンパイル時間 | 2,576 ms |
| コンパイル使用メモリ | 247,320 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-16 22:07:11 |
| 合計ジャッジ時間 | 5,877 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 |
ソースコード
#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);
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,2);
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++;
}
bunshi2/=power(5,b_2,-1);
int inv_2=inverse(B_sub,5);
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;
}
}
}
}
highlighter