QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#749066#9622. 有限小数kindowWA 42ms3796kbC++201.6kb2024-11-14 22:31:492024-11-14 22:31:55

Judging History

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

  • [2024-11-14 22:31:55]
  • 评测
  • 测评结果:WA
  • 用时:42ms
  • 内存:3796kb
  • [2024-11-14 22:31:49]
  • 提交

answer

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

void solve(){
  ll a, b;
  cin >> a >> b;
  vector<__int128_t> mul2(30);
  vector<__int128_t> mul5(30);
  vector<__int128_t> mul10(30);
  mul2[0] = mul5[0] = mul10[0] = 1;
  ll m = max(ceil(log(b) / log(5)), ceil(log2(b)));
  for(int i = 1; i <= m; ++i){
    mul2[i] = mul2[i - 1] * __int128_t(2);
    mul5[i] = mul5[i - 1] * __int128_t(5);
    mul10[i] = mul10[i - 1] * __int128_t(10);
  }
  ll miny = 0x7fffffffff;
  ll totd;
  for(ll i = 0; i <= m; ++i){
    __int128_t r = 1;
    ll curb = b;
    ll num2 = 0;
    ll num5 = 0;
    while(curb % 2 == 0){
      curb /= 2ll;
      num2++;
    }
    while(curb % 5 == 0){
      curb /= 5ll;
      num5++;
    }
    for(ll j = 0; j < min(i, num2); ++j){
      r *= 2ll;
    }
    for(ll j = 0; j < min(i, num5); ++j){
      r *= 5ll;
    }
    for(ll p = 0; p <= i; ++p){
      for(ll q = 0; q <= i; ++q){
        if((mul10[i] / r) % mul2[p] || (mul10[i] / r) % mul5[q]){
          continue;
        }
        __int128_t cur = mul10[i] / r * a / mul2[p] / mul5[q];
        __int128_t now = b / r;
        __int128_t bn = cur / now + 1;
        __int128_t c = (bn * now - cur) % now;
        __int128_t t = mul10[i] / mul2[p] / mul5[q];
        __int128_t curd = t * b / r;
        if(c < miny){
          miny = c;
          totd = curd;
        }
      }
    }
  }
  cout << miny << ' ' << totd << '\n';
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int t;
  cin >> t;
  while(t--){
    solve();
  }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4
1 2
2 3
3 7
19 79

output:

0 10
1 3
1 14
3 316

result:

ok 4 case(s)

Test #2:

score: -100
Wrong Answer
time: 42ms
memory: 3796kb

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
3 165625
1 60
1 350
7 90500
23 246000
5 282
5 326
1 63360
0 1000000
1 61000
0 100000
1 4880
1 10750
1 18500
3 28600000
1 331250
1 460000
1 31
1 6
7 113125
1 455000
3 92000
1 1265625
0 10
1 304
0 100000
1 415
1 235937500
1 765000000
1 4640
1 608
1 4406250
3 3100000
1 480
3 347500
1 944
1 43600
1...

result:

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