QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#740565 | #9622. 有限小数 | susanzhishen | WA | 92ms | 3880kb | C++14 | 2.3kb | 2024-11-13 10:32:23 | 2024-11-13 10:32:28 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define double long double
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef long long ll;
typedef pair<int,int> PII;
const int N=3e5+10;
const int M=1e3+10;
int mod=998244353;
vector<int>sp;
//exgcd可以求出不定方程 ax+by=c的一组特解
//原方程有解的条件是c%gcd(a,b)==0;
//即求 ax+by=gcd(a,b) 的一组特解,然后将x和y乘以 c/gcd(a,b) 即可
//1.当b等于0时,x=1,y=0即可
//2.当b!=0时,根据递归的x1,y1反解出上一层的x和y
//x=y1,y=(x1-a/b*y1),回溯的时候用.
//通解为 x=x1+s*dx,t=y1-s*dy; 其中dx=b/gcd(a,b),dy=a/gcd(a,b);
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
void Exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return ;
}
int p;
Exgcd(b,a%b,x,y);
p=x;
x=y;
y=p-a/b*y;
return ;
}
int check(int x){
if(x%5==0||x%2==0) return 1;
return 0;
}
void solve(){
int a,b;cin>>a>>b;
int pp=1;
for(int i=1;i*i<=b;i++){
if(b%i==0){
if(!check(i)) pp=max(pp,i);
if(!check(b/i)) pp=max(pp,b/i);
}
}
int ansc=1e18;
int ansd=1e18;
for(auto u:sp){
if(u*pp*b>1e10) break;
int d=u*pp;
int aa=pp*pp;
int bb=-b;
int cc=a*d;
if(cc%__gcd(aa,bb)!=0) continue;
int x0=0,y0=0;
Exgcd(aa,bb,x0,y0);
int g=cc/__gcd(aa,bb);
int dx=bb/__gcd(aa,bb),dy=aa/__gcd(aa,bb);
x0*=g,y0*=g;
if(u*pp*b==98){
// cout<<x0<<" "<<y0<<" "<<dx<<" "<<dy<<"\n";
}
int s;
if(dy<0) s=(y0+dy-1)/dy;
else s=(y0-dy+1)/dy;
y0-=s*dy;
if(x0+s*dx>0){
int cp=__gcd(y0,d);
if(y0/cp<ansc) ansc=y0/cp,ansd=d/cp;
}
}
cout<<ansc<<" "<<ansd<<"\n";
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int _;
for(int i=0;(int)powl(2,i)<=1000000000;i++){
int x=(int)pow(2,i);
for(int j=0;(int)powl(5,j)*x<=1000000000;j++){
sp.push_back((int)powl(5,j)*x);
}
}
sort(sp.begin(),sp.end());
_=1;
cin>>_;
while(_--){
solve();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3828kb
input:
4 1 2 2 3 3 7 19 79
output:
0 1 1 3 1 14 3 316
result:
ok 4 case(s)
Test #2:
score: -100
Wrong Answer
time: 92ms
memory: 3880kb
input:
10000 11 12 28 53 17 60 2 35 17 181 80 123 68 141 79 163 71 99 13 64 33 61 15 32 16 61 11 86 33 74 128 143 40 53 7 23 30 31 5 6 86 181 73 91 13 23 71 81 1 2 7 38 117 160 33 83 129 151 88 153 25 58 16 19 19 141 95 124 43 96 71 139 11 59 106 109 93 152 34 43 17 99 1 57 20 159 16 25 5 73 159 170 172 17...
output:
1 3 1 54272 1 6 1 7 7 90500 23 3936 5 282 5 326 1 63360 0 1 1 31232 0 1 1 4880 1 10750 1 18500 1 11714560 1 331250 1 2944 1 31 1 6 7 113125 1 455000 1 58880 1 51840 0 1 1 304 0 1 1 415 1 19328000 5 156672 1 4640 1 608 1 72192 3 775 1 3 3 347500 1 944 1 43600 1 76 1 430000 1 6336 1 29184 11 795000 0 ...
result:
wrong answer Jury found better answer than participant's 1 < 7 (Testcase 5)