QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#754655 | #9622. 有限小数 | app1eDog | WA | 0ms | 3592kb | C++20 | 2.7kb | 2024-11-16 15:29:59 | 2024-11-16 15:30:00 |
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;
debug(a, b, m);
LL g = exgcd(exgcd, a, b, x, y);
if (m % g) return -1ll;
a /= g, b /= g, m /= g;
debug(a, b, m, g);
LL t = (y * m + a - 1) / a;
debug(a * t, y * m);
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 * b > 100) continue;
LL d = i * j * b;
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: 0
Wrong Answer
time: 0ms
memory: 3592kb
input:
4 1 2 2 3 3 7 19 79
output:
0 1 1 3 1 14 60 79
result:
wrong answer Jury found better answer than participant's 3 < 60 (Testcase 4)