QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#754655#9622. 有限小数app1eDogWA 0ms3592kbC++202.7kb2024-11-16 15:29:592024-11-16 15:30:00

Judging History

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

  • [2024-11-16 15:30:00]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3592kb
  • [2024-11-16 15:29:59]
  • 提交

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)