zoukankan      html  css  js  c++  java
  • 2012 MultiUniversity Training Contest 4 D Trouble

    hash

     1 # include <stdio.h>
     2 # include <string.h>
     3 
     4 # define N 205
     5 # define M 100007
     6 
     7 typedef long long int LL;
     8 
     9 int n;
    10 LL a[6][N];
    11 int head[M], next[N*N+N];
    12 
    13 int hash(LL x)
    14 {
    15                 return ((x%M)+M)%M;
    16 }
    17 
    18 void init_hash_table(void)
    19 {
    20                 memset(head, -1, sizeof(head));
    21 }
    22 
    23 void insert_hash_table(LL num, int i)
    24 {
    25                 int hkey = hash(num);
    26                 /*
    27                 int u = head[hkey];
    28                 while (~u)
    29                 {
    30                                 if (a[u/n][4]+a[u%n][5]==num) return ;
    31                                 u = next[u];
    32                 }*/
    33                 next[i] = head[hkey];
    34                 head[hkey] = i;
    35 }
    36 
    37 int lookup_hash_table(LL num)
    38 {
    39                 int hkey = hash(num);
    40                 int u = head[hkey];
    41                 while (~u)
    42                 {
    43                                 if (a[4][u/n]+a[5][u%n] == num) return 1;
    44                                 u = next[u];
    45                 }
    46                 return 0;
    47 }
    48 
    49 int solve(void)
    50 {
    51                 int i, j, k, nn = 0;
    52                 init_hash_table();
    53                 for (i = 0; i < n; ++i)
    54                 for (j = 0; j < n; ++j)
    55                 {
    56                                 insert_hash_table(a[4][i]+a[5][j], i*n+j) ;
    57                 }
    58                 for (i = 0; i < n; ++i)
    59                 for (j = 0; j < n; ++j)
    60                 for (k = 0; k < n; ++k)
    61                 {
    62                                 if (lookup_hash_table(-a[1][i]-a[2][j]-a[3][k]))
    63                                                 return 1;
    64                 }
    65                 return 0;
    66 }
    67 
    68 int main()
    69 {
    70                 freopen("in.txt", "r", stdin);
    71 
    72                 int T, i, j, k;
    73 
    74                 scanf("%d", &T);
    75                 for (i = 1; i <= T; ++i)
    76                 {
    77                                 scanf("%d", &n);
    78                                 for (j = 1; j <= 5; ++j)
    79                                 for (k = 0; k < n; ++k)
    80                                                 scanf("%I64d", &a[j][k]);
    81                                 if (solve())
    82                                                 puts("Yes");
    83                                 else
    84                                                 puts("No");
    85                 }
    86 
    87                 return 0;
    88 }
  • 相关阅读:
    解析网页源码方式
    vue踩坑--细节决定成败
    fallowing-travelvue
    学会不怕
    eslint代码规范检测
    三次握手+四次挥手
    小白的学习笔记
    es6数组
    css知识整理
    JavaScript之事件循环,宏任务与微任务
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2656253.html
Copyright © 2011-2022 走看看