poj 1840hash

a1+a2+a3+a4+a5=0;

转化成a1+a2=-(a3+a4+a5);

即先储存,后查找;

#include<iostream>  
#include<vector>
#include <string>   
#include<algorithm>  
#include<fstream>
#include<cmath>  
using namespace std;  
#define lch(i) ((i)<<1)  
#define rch(i) ((i)<<1|1)  
#define sqr(i) ((i)*(i))  
#define pii pair<int,int>  
#define mp make_pair  
#define FOR(i,b,e) for(int i=b;i<=e;i++)  
#define FORE(i,b,e) for(int i=b;i>=e;i--)  
#define ms(a)   memset(a,0,sizeof(a))  
const int maxnum =10007;
const int key = 177;

long long p[6][105];
int s[5];
int times;
struct NODE
{
	long long val;
	int time,next;
}node[10400];
int e=0;
int hashn[maxnum];


void init(){
	FOR(i,0,maxnum-1) hashn[i]=-1;
}

int findsum(long long sum){
	int nth =sum%maxnum;
	nth = abs(nth);
	for(int i=hashn[nth];i!=-1;i=node[i].next){
		if(node[i].val==sum){
			return node[i].time;
		}
	}
	return 0;
}

void insert(long long sum){
	int nth =abs((int)(sum%maxnum));
	for(int i=hashn[nth];i!=-1;i=node[i].next){
		if(node[i].val==sum){
			node[i].time++;
			return;
		}
	}
	node[e].val=sum;
	node[e].next = hashn[nth];
	node[e].time=1;
	hashn[nth]=e++;
}


int main()    
{    /*
	fstream fin("G:/1.txt");*/
	ms(node);
	FOR(i,0,4){
		scanf("%d",&s[i]);/*
		fin>>s[i];*/
		FOR(j,-50,-1)
			p[i+1][j+51]=s[i]*j*j*j;
		FOR(j,1,50)
			p[i+1][j+50]=s[i]*j*j*j;
	}
	init();
	FOR(i,1,100){
		FOR(j,1,100){
			insert(0-(p[1][i]+p[2][j]));
		}
	}
	times=0;
	FOR(i,1,100)
		FOR(j,1,100)
			FOR(k,1,100)
				times+=findsum(p[3][i]+p[4][j]+p[5][k]);
	
	printf("%d\n",times);
	
	return 0;
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值