zoukankan      html  css  js  c++  java
  • 4 Values whose Sum is 0 UVA

    4 Values whose Sum is 0

     UVA - 1152

    题意:给n组4个数,问有多少种组合(每组选一个)使得四个数的和为零.

    补个简单题...之前写的哈希表有问题一直没过就忘了,今天刚好看到~

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long 
     4 const int maxn = 4010;
     5 const int H_SZ = 16131313;
     6 
     7 int a[maxn][4];
     8 
     9 struct HS{
    10     ll val[H_SZ], res[H_SZ];
    11     int head[H_SZ], nex[H_SZ];
    12     int cnt;
    13 
    14     void init(){
    15         memset(head, -1, sizeof(head));
    16         memset(res, 0, sizeof(res));
    17         cnt = 0;
    18     }
    19 
    20     void add(ll x) {
    21         x += 1e11;
    22         int u = x%H_SZ;
    23         val[cnt] = x;
    24         res[cnt] ++;
    25         nex[cnt] = head[u];
    26         head[u] = cnt++;
    27     }
    28 
    29     int query(ll x) {
    30         x += 1e11;
    31         int u = x%H_SZ;
    32         for(int i = head[u]; ~i; i = nex[i]) {
    33             if(val[i] == x) return i;
    34         }
    35         return H_SZ;
    36     }
    37 }hs;
    38 
    39 int main(){
    40     int t, kase = 0;
    41     //freopen("in.txt", "r", stdin);
    42     scanf("%d", &t);
    43     while(t--) {
    44         if(kase) puts("");
    45         kase++;
    46         hs.init();
    47         int n;
    48         scanf("%d", &n);
    49         for(int i = 0; i < n; i++){
    50             for(int j = 0; j < 4; j++) {
    51                 scanf("%d", &a[i][j]);
    52             }
    53         }
    54         for(int i = 0; i < n; i++){
    55             for(int j = 0; j < n; j++){
    56                 int x = a[i][0] + a[j][1];
    57                 int id = hs.query(x);
    58                 if(id == H_SZ) hs.add(x);
    59                 else hs.res[id]++;
    60             }
    61         }
    62         int ans = 0;
    63         for(int i = 0; i < n; i++){
    64             for(int j = 0; j < n; j++){
    65                 int x = -(a[i][2] + a[j][3]);
    66                 int id = hs.query(x);
    67                 if(id != H_SZ) ans += hs.res[id]; 
    68             }
    69         }
    70         printf("%d
    ", ans);
    71     }
    72 }
    View Code
  • 相关阅读:
    站立会议(3)
    站立会议(2)
    站立会议(1)
    团队报告
    Laravel5.1 模型 --一对多关系
    jQuery 操作DOM
    Laravel5.1 模型 --一对一关系
    Laravel5.1 模型--查询作用域
    Laravel5.1 模型--ModelFactory
    jQuery 选择器
  • 原文地址:https://www.cnblogs.com/yijiull/p/7628939.html
Copyright © 2011-2022 走看看