没有判断同号,超时了半天。
#include <iostream>
using namespace std;
#define N 2000010
#define M 1000010
int res[N];
int res2[N];
int t[101];
int main()
{
for(int i = 0; i <= 100; i++)
{
t[i] = i * i;
}
int a, b, c, d;
while(~scanf("%d%d%d%d", &a, &b, &c, &d))
{
if (a > 0 && b > 0 && c > 0 && d > 0 || a < 0 && b < 0 && c < 0 && d < 0) //都是同号必定无解,木有这个超时
{
puts("0");
continue;
}
memset(res, 0, sizeof(res));
memset(res2, 0, sizeof(res2));
c = -1 * c;
d = -1 * d;
for(int i = 1; i <= 100; i++)
{
int temp = a * t[i] + M;
for(int j = 1; j <= 100; j++)
{
res[temp + b *t[j]]++;
}
}
for(int i = 1; i <= 100; i++)
{
int temp = c * t[i] + M;
for(int j = 1; j <= 100; j++)
{
res2[temp + d *t[j]]++;
}
}
int sum = 0;
for(int i = 0; i < N; i++)
{
sum = sum + res[i] * 4 * res2[i] * 4;
// printf("%d %d\n", res[i], res2[i]);
}
cout << sum << endl;
}
return 0;
}