QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#587861#9381. 502 Bad GatewayxuemanWA 149ms3712kbC++172.8kb2024-09-24 22:06:282024-09-24 22:06:29

Judging History

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

  • [2024-09-24 22:06:29]
  • 评测
  • 测评结果:WA
  • 用时:149ms
  • 内存:3712kb
  • [2024-09-24 22:06:28]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
const int N = 1000 + 10;
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;

template <class T>
struct Frac
{
    T num;
    T den;
    Frac(T num_, T den_) : num(num_), den(den_)
    {
        if (den < 0)
        {
            den = -den;
            num = -num;
        }
    }
    Frac() : Frac(0, 1) {}
    Frac(T num_) : Frac(num_, 1) {}
    explicit operator double() const
    {
        return 1. * num / den;
    }
    Frac &operator+=(const Frac &rhs)
    {
        num = num * rhs.den + rhs.num * den;
        den *= rhs.den;
        return *this;
    }
    Frac &operator-=(const Frac &rhs)
    {
        num = num * rhs.den - rhs.num * den;
        den *= rhs.den;
        return *this;
    }
    Frac &operator*=(const Frac &rhs)
    {
        num *= rhs.num;
        den *= rhs.den;
        return *this;
    }
    Frac &operator/=(const Frac &rhs)
    {
        num *= rhs.den;
        den *= rhs.num;
        if (den < 0)
        {
            num = -num;
            den = -den;
        }
        return *this;
    }
    friend Frac operator+(Frac lhs, const Frac &rhs) { return lhs += rhs; }
    friend Frac operator-(Frac lhs, const Frac &rhs) { return lhs -= rhs; }
    friend Frac operator*(Frac lhs, const Frac &rhs) { return lhs *= rhs; }
    friend Frac operator/(Frac lhs, const Frac &rhs) { return lhs /= rhs; }
    friend Frac operator-(const Frac &a) { return Frac(-a.num, a.den); }
    friend bool operator==(const Frac &lhs, const Frac &rhs) { return lhs.num * rhs.den == rhs.num * lhs.den; }
    friend bool operator!=(const Frac &lhs, const Frac &rhs) { return lhs.num * rhs.den != rhs.num * lhs.den; }
    friend bool operator<(const Frac &lhs, const Frac &rhs) { return lhs.num * rhs.den < rhs.num * lhs.den; }
    friend bool operator>(const Frac &lhs, const Frac &rhs) { return lhs.num * rhs.den > rhs.num * lhs.den; }
    friend bool operator<=(const Frac &lhs, const Frac &rhs) { return lhs.num * rhs.den <= rhs.num * lhs.den; }
    friend bool operator>=(const Frac &lhs, const Frac &rhs) { return lhs.num * rhs.den >= rhs.num * lhs.den; }
    friend std::ostream &operator<<(std::ostream &os, Frac x)
    {
        T g = std::gcd(x.num, x.den);
        return os << x.num / g << " " << x.den / g;
    }
};

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin >> T;
    while (T--)
    {
        int t;
        cin >> t;
        ll x = floor(sqrt(2 * t)), y = ceil(sqrt(2 * t));
        Frac<ll> x1(x - 1, 2), y1(t, x), z1;
        z1 = x1 + y1;
        Frac<ll> x2(y - 1, 2), y2(t, y), z2;
        z2 = x2 + y2;
        if (z1 > z2)
            cout << z1 << endl;
        else
            cout << z2 << endl;
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3712kb

input:

3
1
2
3

output:

1 1
3 2
2 1

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 149ms
memory: 3672kb

input:

1000000
1
1000000000
1
1
1000000000
1
1000000000
1
1
1
1000000000
1
1
1000000000
1
1000000000
1000000000
1
1000000000
1
1
1000000000
1
1000000000
1000000000
1
1000000000
1000000000
1000000000
1000000000
1000000000
1000000000
1
1
1000000000
1
1000000000
1000000000
1000000000
1000000000
1
1
1
10000000...

output:

1 1
2000006281 44722
1 1
1 1
2000006281 44722
1 1
2000006281 44722
1 1
1 1
1 1
2000006281 44722
1 1
1 1
2000006281 44722
1 1
2000006281 44722
2000006281 44722
1 1
2000006281 44722
1 1
1 1
2000006281 44722
1 1
2000006281 44722
2000006281 44722
1 1
2000006281 44722
2000006281 44722
2000006281 44722
20...

result:

wrong answer 2nd lines differ - expected: '1999961560 44721', found: '2000006281 44722'