QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#754549#9622. 有限小数Bigmonster#WA 17ms3676kbC++202.7kb2024-11-16 15:17:572024-11-16 15:17:57

Judging History

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

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

answer

// created on Lucian Xu's Laptop

#include <bits/stdc++.h>

// using namespace std;

#define typet typename T
#define typeu typename U
#define types typename... Ts
#define tempt template <typet>
#define tempu template <typeu>
#define temps template <types>
#define tandu template <typet, typeu>

using UI = unsigned int;
using ULL = unsigned long long;
using LL = long long;
using ULL = unsigned long long;
using i128 = __int128;
using PII = std::pair<int, int>;
using PIL = std::pair<int, LL>;
using PLI = std::pair<LL, int>;
using PLL = std::pair<LL, LL>;
using vi = std::vector<int>;
using vvi = std::vector<vi>;
using vl = std::vector<LL>;
using vvl = std::vector<vl>;
using vpi = std::vector<PII>;

#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()

#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) \
    do {           \
    } while (false)
#endif

constexpr int mod = 998244353;
constexpr int inv2 = (mod + 1) / 2;
constexpr int inf = 0x3f3f3f3f;
constexpr LL INF = 1e18;
constexpr double pi = 3.141592653589793;
constexpr double eps = 1e-6;

constexpr int lowbit(int x) { return x & -x; }
tandu bool Max(T& x, const U& y) { return x < y ? x = y, true : false; }
tandu bool Min(T& x, const U& y) { return x > y ? x = y, true : false; }

void solut() {
    auto exgcd = [&](auto&& self, LL a, LL b, LL& x, LL& y) {
        if (!b) {
            x = 1, y = 0;
            return a;
        }
        LL d = self(self, b, a % b, y, x);
        y -= a / b * x;
        return d;
    };
    auto find = [&](LL a, LL b, LL m) {
        LL x, y;
        LL g = exgcd(exgcd, a, b, x, y);
        if (m % g) return -1ll;
        a /= g, b /= g, m /= g;
        LL t = (y * m + a - 1) / a;
        if (t * a == y * m) t++;
        return a * t - y * m;
    };

    LL a, b;
    std::cin >> a >> b;
    LL m = b;
    while (m % 2 == 0) m /= 2;
    while (m % 5 == 0) m /= 5;
    if (m == 1) {
        std::cout << "0 1" << '\n';
        return;
    }
    LL ans_c = INF, ans_d;
    for (int i = 1; i <= 1e9; i *= 2) {
        for (int j = 1; j <= 1e9; j *= 5) {
            if ((i128) i * j * b > 10000) continue;
            LL d = i * j * b;
            LL c = find(m * m, b, a * d);
            if (c == -1) continue;
            c /= std::gcd(c, d), d /= std::gcd(c, d);
            if (Min(ans_c, c)) ans_d = d;
        }
    }
    std::cout << ans_c << ' ' << ans_d << '\n';
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    std::cin >> t;
    while (t--) {
        solut();
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 17ms
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 12
5 1696
1 60
1 35
11 1810
23 3936
5 282
5 326
5 3168
0 1
11 1220
0 1
1 4880
13 4300
2 370
7 1430
7 1325
1 2944
1 31
1 30
9 362
15 1456
3 7360
7 2025
0 1
1 7600
0 1
1 415
22 151
19 765
2 290
1 608
37 7050
3 3100
1 96
32 3475
1 944
3 109
1 1520
2 215
1 6336
7 2850
59 795
0 1
11 7300
1 1700
7 179
1...

result:

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