QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#740612#9622. 有限小数susanzhishenWA 188ms3816kbC++142.4kb2024-11-13 10:43:532024-11-13 10:43:54

Judging History

你现在查看的是最新测评结果

  • [2024-11-13 10:43:54]
  • 评测
  • 测评结果:WA
  • 用时:188ms
  • 内存:3816kb
  • [2024-11-13 10:43:53]
  • 提交

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);
        }
    }
    if(pp==1){
        cout<<0<<" "<<1<<"\n";
        return ;
    }
    int ansc=1e18;
    int ansd=1e18;
    for(auto u:sp){
        if(u*pp*b>1e18) 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(d/cp>1e9) continue;
            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: 3816kb

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: 0
Accepted
time: 157ms
memory: 3796kb

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
1 231680000
23 3936
1 36096000
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
1 289600000
1 455000
1 58880
1 51840
0 1
1 304
0 1
1 415
1 19328000
1 765000000
1 4640
1 608
1 72192
3 775
1 3
3 347500
1 944
1 43600
1 76
1 430000
1 6336
1 291...

result:

ok 10000 case(s)

Test #3:

score: -100
Wrong Answer
time: 188ms
memory: 3800kb

input:

10000
649 915
163 504
53 235
130 131
109 475
214 757
719 788
479 975
515 811
367 972
69 221
21 44
53 157
77 398
227 332
38 87
145 976
396 403
203 381
675 838
157 309
827 962
17 56
455 654
377 809
605 908
907 929
631 978
286 621
289 462
425 428
139 144
259 368
623 642
767 773
32 281
235 624
88 871
39...

output:

1 11712
1 630
1 192512
1 131
1 95
9 19379200
1 15760
7 624
33 129760000
1 199065600
1 3536
1 44
2 98125
9 31840
1 66400
1 1392
1 9994240
4 31484375
1 243840
9 838000
1 98880000
3 4925440
1 14
1 10464000
17 2071040
1 2270000
4 2903125
7 1222500
31 79488
17 288750
1 107000
1 45
1 115
1 64200000
6 773
...

result:

wrong answer Jury found better answer than participant's 1 < 3 (Testcase 1115)