QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#907#590128#9381. 502 Bad GatewayTrspntTrspntFailed.2024-09-25 21:49:492024-09-25 21:49:49

Details

Extra Test:

Invalid Input

input:

1
1000000000000000000000000000000000000000000000000000000000000000000

output:


result:

FAIL Expected integer, but "100000000000000000000000000000...0000000000000000000000000000000" found (test case 1, stdin, line 2)

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#590128#9381. 502 Bad GatewayTrspntAC ✓290ms3712kbC++231.3kb2024-09-25 21:47:352024-09-25 21:47:36

answer

/*

    2024.9.25
    2024ICPC网络赛L
    by Trspnt

*/
#include <bits/stdc++.h>

#define int long long

using namespace std;
typedef pair<int,int> PII;
typedef tuple<int,int,int> tp;
const int N = 110,INF = 0x3f3f3f3f3f3f3f3f,mod = 998244353;

/*
    假定一个阈值c,如果没有超出阈值就一直刷新,直到刷新不如不刷,过程如果刷到小于c就直接到结束,刷到1-t的概率为c/t,那么有E=Σ(i*P[i]+1/c*(c*c-1)/2)=Σ(i*P[i])+(c-1)/2
    根据E(x+y)=E(x)+E(y)可知,Σ(i*P[i])=Σ(1-p[i])=lim(n->无限)(1-(c/t)^n)/(1-(1-c/t))=1/(c/t)=t/c
    所以有E=(c-1)/2+t/c=c/2+t/c+1/2,根据对勾函数性质,最小值在c1=ceil(sqrt(2*t)) and c2=floor(sqrt(2*t))时取到,然后比较二者哪个小即为答案
*/

void solve()
{
    int n;
    cin>>n;
    int l=ceil(sqrt(2*n)),r=floor(sqrt(2*n));
    int up1=l*l-l+2*n,down1=2*l;
    int g1=__gcd(up1,down1);
    up1/=g1,down1/=g1;
    int up2=r*r-r+2*n,down2=2*r;
    int g2=__gcd(up2,down2);
    up2/=g2,down2/=g2;
    if(1.0*up1/down1>1.0*up2/down2)cout<<up2<<" "<<down2<<"\n";
    else cout<<up1<<" "<<down1<<"\n";
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T=1;
    cin>>T;
    //init();
    while(T--)solve();
    return 0;
}