• PKU 4334 Trouble(哈希)


    原题链接

    思路:哈希存入相反数

    注意:HDU不支持long long要使用__int64

    #include<cstdio>
    #include<cstring> 
    #define mod 401704//开到所有数据十倍大左右
    using namespace std;
    
    bool flag[mod];
    __int64 m[5][210],hash[mod];
    int judge(__int64 x)
    {
        int s=x%mod;
        if(s<0) s+=mod;//将负数转正 
      /*while(x<0) x+=mod;
        int s=x%mod;  TLE*/
        while(flag[s]&&hash[s]!=x)
            s=(s+1)%mod;//线性探测再散列 
        return s;
    }//返回哈希地址 
    
    int main()
    {
        int T,n;
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            memset(flag,0,sizeof(flag));
            for(int i=0;i<5;i++)
                for(int j=0;j<n;j++)
                   scanf("%I64d",&m[i][j]);
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    __int64 sum=-(m[0][i]+m[1][j]);
                    int t=judge(sum);
                    flag[t]=1;
                    hash[t]=sum;
                }
            }
            bool sign=false;
            for(int i=0;i<n&&!sign;i++){
                   for(int j=0;j<n&&!sign;j++){
                      for(int k=0;k<n&&!sign;k++){
                          __int64 sum=m[2][i]+m[3][j]+m[4][k];
                          int t=judge(sum);
                          if(flag[t]) sign=true; 
                      }
                  }
              }
            if(sign) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    PAT甲级1137Final Grading
    晚测6
    模拟15
    模拟14
    模拟13
    晚测5
    晚测4
    模拟11
    7012. 2021.03.15【2021省赛模拟】十
    7011. 2021.03.13【2021省赛模拟】nonintersect
  • 原文地址:https://www.cnblogs.com/freinds/p/6414479.html
Copyright © 2020-2023  润新知