• #哈希 题目:Eqs(POJ


    题目

    考虑具有以下形式的方程:
    a1x1 3 + a2x2 3 + a3x3 3 + a4x4 3 + a5x5 3 = 0
    系数是从区间[-50,50]起的整数。
    考虑解决方案(x1,x2,x3,x4,x5)来验证方程xi∈[-50,50],xi!= 0,任何i∈{1,2,3,4,5 }。
    
    确定满足给定方程的解数。
    输入项
    输入的唯一行包含由空格分隔的5个系数a1,a2,a3,a4,a5。
    输出量
    输出将在第一行包含给定方程的解数。
    

    .

    样本输入
    37 29 41 43 47
    样本输出
    654
    

    思路:

    把五项拆成三项
    前两项先进行哈希然后储存
    后三项变为负数后与相对应的哈希位置匹配,若有数存在,说明这个就是解了
    ans++
    

    答案

    #include<cstdio>
    #include<list>
    using namespace std;
    const int MOD=10007;
    list<int> h[2*MOD+1];
    list<int>::iterator it;
    int a,b,c,d,e,tmp,P;
    long long ans=0;
    int main(){
    	scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
    	for(int i=-50;i<=50;i++){
    		for(int j=-50;j<=50;j++){
    		if(i==0||j==0)continue;//???0;
    		tmp=a*i*i*i+b*j*j*j;//??
    		P=tmp%MOD+MOD;//????MOD????????
    		h[P].push_back(tmp);
    		}
    	}
    	for(int i=-50;i<=50;i++){
    		for(int j=-50;j<=50;j++){
    			for(int k=-50;k<=50;k++){
    				if(i==0||j==0||k==0) continue;//???0;
    				tmp=-(c*i*i*i+d*j*j*j+e*k*k*k);
    				P=tmp%MOD+MOD;//????
    				for(it=h[P].begin();it!=h[P].end();it++){
    					if(tmp==*it) ans++;
    				}
    			}
    		}
    	}
    	printf("%lld",ans);
    	return 0;  
    }	
    
  • 相关阅读:
    oracle索引学习
    (转载)Windows下手动完全卸载Oracle
    Funsion Charts 学习(二)
    Funsion Charts 学习(一)
    集合操作
    文件操作
    字典操作
    字符串操作
    列表操作
    python基本运算
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026789.html
Copyright © 2020-2023  润新知