QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#749097#9622. 有限小数snow_mikuWA 19ms3652kbC++202.2kb2024-11-14 22:38:312024-11-14 22:38:33

Judging History

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

  • [2024-11-14 22:38:33]
  • 评测
  • 测评结果:WA
  • 用时:19ms
  • 内存:3652kb
  • [2024-11-14 22:38:31]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
const ll INF = 1e9;
const int N = 35;

ll gcd(ll a, ll b) {
    if (!b) return a;
    return gcd(b, a % b);
}

struct info {
    ll p2 = 1, p5 = 1, p = 1;
};

ll pow2[N], pow5[N];
vector<pair<ll, ll>> p25;

void init() {
    pow2[0] = 1;
    pow5[0] = 1;
    for (int i = 1;i <= 30;i++) {
        pow2[i] = pow2[i - 1] * 2LL;
    }
    for (int i = 1;i <= 15;i++) {
        pow5[i] = pow5[i - 1] * 5LL;
    }
    for (int i = 0;i <= 30;i++) {
        if (pow2[i] <= INF) {
            for (int j = 0;j <= 15;j++) {
                if (pow5[j] * pow2[i] <= INF) p25.push_back(make_pair(pow2[i], pow5[j]));
                else break;
            }
        }
        else break;
    }
}

info check(ll x) {
    info res;
    while (x % 2 == 0) {
        res.p2 *= 2LL;
        x /= 2;
    }
    while (x % 5 == 0) {
        res.p5 *= 5LL;
        x /= 5;
    }
    res.p = x;
    return res;
}

void solve()
{
    ll a, b; cin >> a >> b;
    info T = check(b);
    ll P = T.p;
    ll x = T.p2 * T.p5;
    // cout << P << " " <<  T.p2 << " " << T.p5 << '\n';

    if (P == 1) {
        cout << 0 << " " << 1 << '\n';
        return;
    }

    // vector<ll> fct;
    // for (int i = 3;i * i <= P;i++) {
    //     if (P % i == 0) {
    //         fct.push_back(i);
    //         if (P % i != i) fct.push_back(P / i);
    //     }
    // }

    // for (int q : fct) {

    // }
    ll c = INF;
    ll d = 1;
    for (auto& [t2, t5] : p25) {
        if (t2 < T.p2 || t5 < T.p5) continue;
        // t2 /= T.p2, t5 /= T.p5;
        ll tmp = P - ((t2 / T.p2) * (t5 / T.p5) * a % P);
        if (c > tmp) {
            if (t2 * t5 * P <= INF) {d = t2 * t5 * P;c = tmp;}
            
            // cout << t2 << " " << t5 << " " << P << '\n';
        }
    }
    cout << c << " " << d << '\n';
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    init();
    // for (auto [x, y] : p25) {
    //     cout << x << " " << y << '\n';
    // }
    int t; cin >> t;
    while(t--) solve();
    return 0;
};

詳細信息

Test #1:

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

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: 19ms
memory: 3652kb

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 828125000
1 60
1 109375
1 231680000
23 960937500
1 36096000
5 326
1 63360
0 1
1 61000
0 1
1 4880
1 10750
1 18500
1 11714560
1 331250
1 898437500
1 31
1 6
1 289600000
1 455000
1 115000000
1 1265625
0 1
1 29687500
0 1
1 415
1 235937500
1 765000000
1 181250
1 2968750
1 4406250
3 24800
1 480
3 34...

result:

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