HDU1496 Equations

来源:互联网 发布:oc第三方网络请求 编辑:程序博客网 时间:2024/05/21 09:51

Equations

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7881    Accepted Submission(s): 3224


Problem Description
Consider equations having the following form: 

a*x1^2+b*x2^2+c*x3^2+d*x4^2=0
a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.

It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.

Determine how many solutions satisfy the given equation.
 

Input
The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
End of file.
 

Output
For each test case, output a single line containing the number of the solutions.
 

Sample Input
1 2 3 -41 1 1 1
 

Sample Output
390880
题意没什么好说的了,这里就是要考虑一点那就是如果系数全大于0或者全小于0是无解哒就可以了QAQ无限TLE.

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>#include <cmath>#include <map>#include <queue>#include <vector>using namespace std;const int MAXN=2000000+1;short ha[MAXN];int a[4];int f(int a){    return a*a;}int main(){    int i,j;    int n=100;    int sum;    while(~scanf("%d",&a[0]))    {        scanf("%d%d%d",&a[1],&a[2],&a[3]);        if(a[0]>0&&a[1]>0&&a[2]>0&&a[3]>0)        {            puts("0");            continue;        }        if(a[0]<0&&a[1]<0&&a[2]<0&&a[3]<0)        {            puts("0");            continue;        }        memset(ha,0,sizeof(ha));        for(i=-n;i<=n;++i)if(i)        for(j=-n;j<=n;++j)if(j)        {            sum=a[0]*f(i)+a[1]*f(j);            if(sum<0)sum+=MAXN;            ha[sum]++;        }        int ans=0;        for(i=-n;i<=n;++i)if(i)        for(j=-n;j<=n;++j)if(j)        {            sum=-a[2]*f(i)-a[3]*f(j);            if(sum<0)sum+=MAXN;            ans+=ha[sum];        }        printf("%d\n",ans);    }    return 0;}




1 0
原创粉丝点击