59分求助
查看原帖
59分求助
287355
1lgorithm楼主2020/9/5 23:01

tle了16个点

#include<stdio.h>
#define ll long long
struct node{
	ll n[11200];
	ll m[11200];
	ll cnt;
};
ll read(){
	ll r=0;
	char c=getchar();
	while(c>='0'&&c<='9')r=r*10+c-48,c=getchar();
	return r;
}
node fen(ll a){
	node z;
	z.cnt=0;
	for(ll i=1;i*i<=a;i++){
		if(a%i==0&&(i+a/i)%2==0){
			z.n[++z.cnt]=i;
			z.m[z.cnt]=a/i;
		}
	}
	return z;
}
int main(){
	ll a,b;
	a=read();
	b=read();
	node x;
	ll sum=0;
	if(a*a==4*b){
		printf("inf");
		return 0;
	}
	if(a*a>4*b){
		//4y^2+(a*a-b*4)=m^2
		//m*m-(2y*2y)=(a*a-b*4)
		//(m+2y)*(m-2y)=(a*a-b*4)
		x=fen(a*a-b*4);
		for(ll i=1;i<=x.cnt;i++){
			if((x.m[i]-x.n[i])%4!=0) continue;
			ll zy=(x.m[i]-x.n[i])/4;
			ll zm=(x.m[i]+x.n[i])/2;
			bool d=(zm-a)&1;
			if(zm>=a&&d==0)sum++;
		}
		printf("%lld",sum);
		return 0;
	}
	if(a*a<4*b){
		//4y^2-(b*4-a*a)=m^2
		//(2y)^2-m^2=(b*4-a*a)
		//(2y+m)*(2y-m)=(b*4-a*a)
		x=fen(4*b-a*a);
		for(ll i=1;i<=x.cnt;i++){
			if((x.m[i]+x.n[i])%4!=0) continue;
			ll zy=(x.m[i]+x.n[i])/4;
			ll zm=(x.m[i]-x.n[i])/2;
			bool d=(zm-a)&1;
			if(zm>=a&&d==0)sum++;
		}
		printf("%lld",sum);
		return 0;
	}
}
2020/9/5 23:01
加载中...