poj 1840hash

来源:互联网 发布:淘宝举报卖家 编辑:程序博客网 时间:2024/05/29 14:41

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;}  


0 0
原创粉丝点击