QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#736874#9622. 有限小数关注 Hydro 谢谢喵 (Jiapeng Chen, Wenkuo Yu, Zien Xu)WA 575ms3620kbC++231.7kb2024-11-12 13:46:552024-11-12 13:46:55

Judging History

This is the latest submission verdict.

  • [2024-11-12 13:46:55]
  • Judged
  • Verdict: WA
  • Time: 575ms
  • Memory: 3620kb
  • [2024-11-12 13:46:55]
  • Submitted

answer

/**
 * @file 9622.cpp
 * @author Macesuted (i@macesuted.moe)
 * @date 2024-11-12
 *
 * @copyright Copyright (c) 2024
 *
 */

#include <bits/stdc++.h>
using namespace std;

#ifndef LOCAL
#define endl '\n'
#endif

bool mem1;

typedef __int128_t int128_t;

const int64_t lim = 1e18;

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

void solve(void) {
    int64_t a, b;
    cin >> a >> b;

    int64_t beta1 = 1;
    while (b % 2 == 0) b /= 2, beta1 *= 2;
    while (b % 5 == 0) b /= 5, beta1 *= 5;

    if (b == 1) return cout << "0 1" << endl, void();
    a %= b;

    int ansc = INT_MAX, ansd = 1;
    for (int128_t beta2 = 1; beta2 <= lim; beta2 *= 2)
        for (int128_t beta3 = 1; beta2 * beta3 <= lim; beta3 *= 5) {
            int128_t v = (b - beta2 * beta3 % b * a % b) % b, x, y, g = exgcd(beta1, b, x, y), tx, ty;
            if (v % g) break;
            x = v / g * x % (b / g), y = beta2 * beta3 * b;
            int128_t gg = exgcd(x, y, tx, ty);
            x /= gg, y /= gg;
            // cerr << "! " << x << ' ' << y << endl;
            if (ansc > x && y <= int(1e9)) ansc = x, ansd = y;
        }

    cout << ansc << ' ' << ansd << endl;

    return;
}

bool mem2;

int main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
#ifdef LOCAL
    cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
#endif

    int _ = 1;
    cin >> _;
    while (_--) solve();

#ifdef LOCAL
    cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
#endif
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4
1 2
2 3
3 7
19 79

output:

0 1
1 3
1 4375
3 316

result:

ok 4 case(s)

Test #2:

score: -100
Wrong Answer
time: 575ms
memory: 3556kb

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 828125000
-2 15
1 7
1 231680000
23 960937500
1 36096000
5 326
1 63360
0 1
1 61000
0 1
1 4880
-41 21500
-31 1480000
1 11714560
1 331250
1 898437500
1 31
-2 15
1 289600000
1 455000
1 115000000
1 1265625
0 1
-17 2968750
0 1
1 415
1 235937500
1 765000000
-27 362500
1 2968750
1 4406250
3 775
-2 3
3...

result:

wrong answer Integer -2 violates the range [0, 10^9]