本来看出了可以在0到a的区间里枚举n和m,但是O(n^3)只过了前面两个测试点,后面想到枚举m的时候可以二分查,写完之后本地调试能过,提交就RE了,求大佬debug
#include <bits/stdc++.h>
using namespace std;
bool erfeng(long long n,long long a,long long c,long long le,long long ri,bool f)
{
if(le>=ri)return 0;
long long m=(le+ri)/2+1;
if(c==(a/n)/m)
{
printf("%lld\n",a/n);
return 1;
}
if(c<(a/n)/m)erfeng(n,a,c,m+1,ri,f);
else if(c>(a/n)/m)erfeng(n,a,c,le,m-1,f);
}
void js()
{
int t;
cin>>t;
long long a,b,c;
bool f=0;
for(int i=1;i<=t;i++)
{
scanf("%lld%lld",&a,&c);
f=0;
for(long long n=1;n<=a;n++)
{
f=erfeng(n,a,c,0,a,f);
if(f==1)break;
}
if(f==0)printf("%d\n",-1);
}
}
int main()
{
js1();
return 0;
}