hdu 1496 Equations(暴力+hash)

1831 ワード

タイトルの意味:
http://acm.hdu.edu.cn/showproblem.php?pid=1496
方程式a*x 1^2+b*x 2+c*x 3^2+d*x 4^2=0に対して、a、b、c、dを与えて、方程式を成立させる方法はどれぐらいありますか?0,属[-100,100]
a,b,c,dも0ではなく、[-50,50]に属する。
Sample Input
 
   
1 2 3 -4 1 1 1 1
 
Sample Output
 
   
39088 0

题目分析:

直接暴力的话,会100^4,,超时,我们可以把等式转化为a*x1^2+b*x2^2=-(c*x3^2+d*x4^2),在进行暴力的话,时间会变成O(100^2),只需要记录左边的值的方案,在右边的遍历中是否会出现,注意负数,还有就是ai^2。 因为是i*i肯定是正数,范围是[-100,100],对于每一个xi^2都有两种状态,对于四个变量因此会多2^4倍中状态。


AC代码:

/**
  *@xiaoran
  *  +hash
  *              ,    +100W   
  */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
int hash[2000010];//    
int main()
{
    int a,b,c,d;
    while(cin>>a>>b>>c>>d){
        if(a>0&&b>0&&c>0&&d>0){//         0
            cout<