QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#754718 | #9622. 有限小数 | Bigmonster# | WA | 71ms | 3664kb | C++20 | 2.7kb | 2024-11-16 15:38:11 | 2024-11-16 15:38:12 |
Judging History
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;
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 (LL i = 1; i <= 1e9; i *= 2) {
for (LL j = 1; j <= 1e9 and i * j <= 1e9; j *= 5) {
if (i * j * m > 1e9) continue;
LL d = i * j * m;
LL c = find(m * m, b, a * d);
if (c == -1) continue;
LL g = std::gcd(c, d);
c /= g, d /= g;
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: 3664kb
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: 71ms
memory: 3604kb
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 1 15 1 7 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 15 1 289600000 1 455000 1 115000000 1 1265625 0 1 1 1484375 0 1 1 415 1 235937500 1 765000000 1 181250 1 2968750 1 4406250 3 775 1 3 3 347500 1 944...
result:
wrong answer Jury found better answer than participant's 1 < 2 (Testcase 228)