QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#739501#9622. 有限小数liubw_WA 142ms3708kbC++111.5kb2024-11-12 21:57:582024-11-12 21:58:01

Judging History

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

  • [2024-11-12 21:58:01]
  • 评测
  • 测评结果:WA
  • 用时:142ms
  • 内存:3708kb
  • [2024-11-12 21:57:58]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fr first
#define sc second
#define int ll

const int inf=1E9+10;

void exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1,y=0;
        return;
    }
    exgcd(b,a%b,y,x);
    y-=a/b*x;
}

int EXGCD(int a,int b,int c){   // ax+by==c 的最小正 x 解
    // cerr<<"a="<<a<<" b="<<b<<" c="<<c<<'\n';
    if(c<0) c+=(-(c/b)+1)*b;
    // cerr<<"a="<<a<<" b="<<b<<" cc="<<c<<'\n';
    int d=__gcd(a,b);
    if(c%d!=0) return inf;
    int x0,y0;
    exgcd(a,b,x0,y0);
    int alf=c/d,bta=(b/d);
    // cerr<<" x00="<<x0<<'\n';
    x0*=alf,y0*=alf;
    // cerr<<" x01="<<x0<<'\n';
    x0=(x0%bta+bta)%bta;
    // cerr<<" x02="<<x0<<'\n';
    return x0;
}

int qpow(int a,int b){
    int ret=1;
    while(b){
        if(b&1) ret*=a;
        a*=a;
        b>>=1;
    }
    return ret;
}

void slv(){
    int a,b,A,B;
    cin>>a>>b;
    A=1,B=b;
    while(B%2==0){
        A*=2;
        B/=2;
    }
    while(B%5==0){
        A*=5;
        B/=5;
    }
    pair<int,int> ans=make_pair(inf,inf);
    for(int x=0;x<=30;x++){
        for(int y=0;y<=10;y++){
            int C=a*qpow(2,x)*qpow(5,y);
            pair<int,int> c=make_pair(EXGCD(A,B,-C),B*qpow(2,x)*qpow(5,y));
            if(c.fr<ans.fr) ans=c;
            if(c.fr==ans.fr&&c.sc<ans.sc) ans.sc=c.sc;
        }
    }
    cout<<ans.fr<<' '<<ans.sc<<'\n';
    return;
}

signed main(){
    int T;
    cin>>T;
    while(T--) slv();
}

/*

4
1 2
2 3
3 7
19 79

*/

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3708kb

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: 142ms
memory: 3576kb

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
1 2608000000000
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
1 3558400000
1 944
1 43600
1 76
1 43000...

result:

wrong answer Integer 2608000000000 violates the range [1, 10^9]