QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#791909#9622. 有限小数UESTC_DECAYALI#WA 270ms3796kbC++201.5kb2024-11-28 21:54:482024-11-28 21:54:55

Judging History

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

  • [2024-11-28 21:54:55]
  • 评测
  • 测评结果:WA
  • 用时:270ms
  • 内存:3796kb
  • [2024-11-28 21:54:48]
  • 提交

answer

#include <bits/stdc++.h>

using i128 = __int128_t;
using llsi = long long;

template <typename T>
T myabs(T a) {
    return a < 0 ? -a : a;
}

i128 p2[41] = {1}, p5[41] = {1};
i128 w;

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

i128 calc(i128 a, i128 b, i128 c) {
    i128 x0, y0;
    i128 g = exgcd(a, b, x0, y0);
    // assert(a * x0 + b * y0 == g);
    if (c % g != 0) return -1;
    x0 *= c / g, y0 *= c / g;
    i128 val = myabs(b / g);
    x0 = (x0 % val + val) % val;
    // if (0 == x0) x0 = val;
    return x0;
}

void work() {
    llsi a, b; std::cin >> a >> b;
    llsi c, d = -1;
    for(int x = 0; x <= 30; ++x) for(int y = 0; y <= 13; ++y) {
        if(b * w % (p2[x] * p5[y]) != 0) break;
        llsi nd = b * w / (p2[x] * p5[y]), nc = calc(- p2[x] * p5[y], b, a * w);
        if(nc < 0) continue;
        if(nd > 1'000'000'000) continue;
        // std::cerr << std::format("x = {}, y = {}, c = {}, d = {}\n", p2[x], p5[y], nc, nd);
        if(d < 0 || nc < c || nc == c && nd < d) c = nc, d = nd;
    }

    std::cout << c << " " << d << std::endl;
}

int main() {
    // std::ios::sync_with_stdio(false);
    // std::cin.tie(nullptr), std::cout.tie(nullptr);
    for(int i = 1; i <= 40; ++i) p2[i] = p2[i - 1] * 2, p5[i] = p5[i - 1] * 5;
    w = p2[30] * p5[13];
    // std::cout << llsi(w) << char(10);
    int T; std::cin >> T; while(T--) work();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4
1 2
2 3
3 7
19 79

output:

0 2
1 3
1 14
3 316

result:

ok 4 case(s)

Test #2:

score: -100
Wrong Answer
time: 270ms
memory: 3548kb

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 12
1 54272
1 60
1 350
1 231680000
23 3936
1 36096000
5 326
1 63360
0 64
1 31232
0 32
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 2
1 304
0 160
1 415
1 19328000
1 765000000
1 4640
1 608
1 72192
3 24800
1 192
3 347500
1 944
1 43600
1 1520
1 43000...

result:

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