QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#750727#9622. 有限小数lilabWA 55ms3676kbC++202.1kb2024-11-15 15:41:172024-11-15 15:41:17

Judging History

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

  • [2024-11-15 15:41:17]
  • 评测
  • 测评结果:WA
  • 用时:55ms
  • 内存:3676kb
  • [2024-11-15 15:41:17]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define db double
#define tp ll
#define ptp pair<tp,tp>
#define pdb pair<db,db>
#define umap unordered_map
#define ed '\n'

using namespace std;

vector<tp>bs;
tp a, b;

tp gcd(tp a, tp b) {
    if (a < b) swap(a, b);
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}

inline tp exgcd(const tp a, const tp b, tp& x, tp& y) {
    if (b == 0) return x = 1, y = 0, a;
    tp d = exgcd(b, a % b, y, x);
    y -= a / b * x; return d;
}

void init() {
    tp tmp = 1;
    while (tmp <= 1e9) {
        bs.push_back(tmp);
        tmp *= 2;
    }
    tp sz = bs.size();
    for (tp i = 0; i < sz; i++) {
        tmp = bs[i];
        tp lim = 1e9;
        while (tmp * 5 <= lim) {
            tmp *= 5;
            bs.push_back(tmp);
        }
    }
    sort(bs.begin(), bs.end());
}

void clear() {
}

void solve() {
    cin >> a >> b;
    tp b1 = b;
    while (b1 % 2 == 0) {
        b1 /= 2;
    }
    while (b1 % 5 == 0) {
        b1 /= 5;
    }
    if (b1 == 1) {
        cout << "0 1" << ed;
        return;
    }
    tp ansc = 2e9, ansd = 2e9;
    for (auto i : bs) {
        tp d = i * b1;
        if (d > 1e9) {
            continue;
        }
        tp fm = (d * b) / gcd(b, d);
        tp num = (fm / b) * a;
        tp k1 = (fm / d);
        //num+k1*c==k2*b1
        //k1*c+b1*(-k2)==(-num)
        //k1*(-c)+b1*k2==num
        tp c = 0, k2 = 0;
        exgcd(k1, b1, c, k2);
        c = -c;
        if ((num * c) % gcd(k1, b1) != 0) {
            continue;
        }
        c = (c * num / gcd(k1, b1));
        tp dis = b1 / gcd(k1, b1);
        if (c < 0) {
            c += (((-c - 1) / dis + 1) * dis);
        }
        if (ansc > c) {
            ansc = c;
            ansd = d;
        }
    }
    cout << ansc << ' ' << ansd << ed;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    init();
    int _t = 0;
    cin >> _t;
    while (_t--) {
        solve();
    }
}
/*

4
1 2
2 3
3 7
19 79


*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3636kb

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: 55ms
memory: 3676kb

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 30
3 347500
1 944
1 43600
1 1520
1 430000
1 6336
1 ...

result:

wrong answer Jury found better answer than participant's 1 < 2 (Testcase 321)