poj 1840 简单哈希

来源:互联网 发布:win7 tcp监听端口阻塞 编辑:程序博客网 时间:2024/06/04 23:27

题意:

给出ai(i=1~5),求a1 * x1^3+ a2 * x2^3+ a3 * x3^3+ a4 * x4^3+ a5 * x5^3=0在-50到50之间的x的解的个数

分析:

把前三个的和放到hash里,然后枚举后两个的和,查一下hash即可。

这题也可以用map去做。


#include<iostream>#include<cstdio>#include<vector>#include<cstring>#include<algorithm>#include<map>using namespace std;const int prime=997;const int l=-50,r=50;vector<int>hs[prime];int main(){    int a[6];    for(int i=1;i<6;i++)scanf("%d",&a[i]);    for(int i=l;i<=r;i++)    for(int j=l;j<=r;j++)        for(int k=l;k<=r;k++){            if(!i||!j||!k)continue;            int t=i*i*i*a[1]+j*j*j*a[2]+k*k*k*a[3];            hs[abs(t)%prime].push_back(t);        }    int ans=0;    for(int i=l;i<=r;i++)    for(int j=l;j<=r;j++){        if(!i||!j)continue;        int t=-(i*i*i*a[4]+j*j*j*a[5]);        int id=abs(t)%prime;        for(int k=0;k<hs[id].size();k++)            if(hs[id][k]==t)ans++;    }    printf("%d\n",ans);    return 0;}


0 0
原创粉丝点击