zoukankan      html  css  js  c++  java
  • POJ 2785 HASH

    题目链接:http://poj.org/problem?id=2785

    题意:给定n行数字,每行4个数分别是a,b,c,d,现在要求能有多少个(a,b,c,d)组合并且和为0

    思路:n^2统计所有(a+b),然后n^2统计(-1*(c+d)),再从(a+b)中找即可。注意map会超时。所以可以用Hash表或者排序+二分

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    #include<time.h>
    #include<map>
    using namespace std;
    typedef long long int LL;
    const int MAXN=4000+5;
    struct Node{
        int a,b,c,d;
    }Num[MAXN];
    int Hash[MAXN*MAXN];
    int main(){
        int n;
        while(~scanf("%d",&n)){
            int cnt=0;
            for(int i=1;i<=n;i++){
                scanf("%d%d%d%d",&Num[i].a,&Num[i].b,&Num[i].c,&Num[i].d);
            }
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    int Sum=Num[i].a+Num[j].b;
                    Hash[cnt++]=Sum;
                }
            }
            sort(Hash,Hash+cnt); int ans=0;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    int Sum=(-1)*(Num[i].c+Num[j].d);
                    for(int k=lower_bound(Hash,Hash+cnt,Sum)-Hash;k<cnt;k++){
                        if(Hash[k]!=Sum){
                            break;
                        }
                        else{
                            ans++;
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    mac-常用命令
    react-redux-数据流
    ##通讯录阶段重要代码
    ##DAY15——UICollectionView
    ##DAY14——StoryBoard
    通讯录——单例
    通讯录——选择图片
    ##DAY13——可视化编程之XIB
    ##DAY12 UITableViewCell自定义
    ##DAY10 UITableView基础
  • 原文地址:https://www.cnblogs.com/kirito520/p/5659339.html
Copyright © 2011-2022 走看看