poj 2785 4 Values whose Sum is 0 哈希

第一次hash,sum保存出现次数,第二次hash统计答案,注意负数取模。

#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 4000+10
int x,y;
int fuck[4][N];
map::iterator it;
long long ans;
inline int ReadInt()
{
    int flag=0;
    char ch = getchar();
    int data = 0;
    while (ch < '0' || ch > '9')
    {
        if(ch=='-') flag=1;
        ch = getchar();
    }
    do
    {
        data = data*10 + ch-'0';
        ch = getchar();
    }while (ch >= '0' && ch <= '9');
        if(flag) data=-data;
        return data;
}
#define MAXN 19999997
#define INF 0x7fffffff
int sum[MAXN+10];
int Hash[MAXN+10];
bool HashInsert(int value)
{
      int v=(value%MAXN+MAXN)%MAXN;
      while(Hash[v]!=INF&&Hash[v]!=value){
          v++;
          v%=MAXN;
      }
      if(Hash[v]==INF){
         Hash[v]=value;
         sum[v]++;
         return true;
      }
      sum[v]++;
      return false;
}
void check(int value)
{
      int v=(value%MAXN+MAXN)%MAXN;
      while(Hash[v]!=INF&&Hash[v]!=value)
      {
          v++;
          v%=MAXN;
      }
      if(Hash[v]==INF) return;
      ans+=sum[v];
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        ans=0;
        fill_n(Hash,MAXN,INF);
        memset(sum,0,sizeof(sum));
        for(int i=0;i


你可能感兴趣的:(未分类)