Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37442 | 22级廖思学 | 【S】T2 | C++ | 通过 | 100 | 308 MS | 260 KB | 872 | 2025-03-30 16:28:17 |
#include<bits/stdc++.h> using namespace std; #define int long long int T,n,m; int U(int a,int b){return (a%b==0?a/b:a/b+1);} int D(int a,int b){return U(a,b)-1;} int cal(int n,int k){ // cout<<"!!!"<<n<<" "<<k<<endl; int g=__gcd(n,k),d=n/g,res=0; for(int p=0;p<k;p++){ int l=U(n*p+1,k-1),r=D(n*(p+1)+1,k); if(l>d)break;r=min(r,d); if(l>r)continue; int x=(l*k-1)%n+1,y=(r*k-1)%n+1; // cout<<p<<" "<<l<<" "<<r<<" "<<x<<" "<<y<<endl; res+=(x+y)*((y-x)/k+1)/2; } return res; } signed main(){ scanf("%lld",&T); while(T--){ int ans=0,K=1; scanf("%lld%lld",&n,&m); for(int k=2;k<=min(n,m);k++){ int res=cal(n,k);//cout<<k<<" "<<res<<endl; if(res>ans){ans=res;K=k;} } printf("%lld\n",K); } return 0; }