标签:
1 #include<stdio.h> 2 #include<string.h> 3 typedef long long ll ; 4 const int mod = 1000000 + 3 ; 5 int a[mod] ; 6 ll sum[mod] ; 7 int n , k ; 8 9 struct edge 10 { 11 int nxt ; 12 int node ; 13 }e[mod]; 14 int head[mod] , top ; 15 16 void init () 17 { 18 memset (head , 0 , sizeof(head)) ; 19 top = 0 ; 20 } 21 22 void insert (ll x) 23 { 24 int y = x % mod ; 25 if (y < 0) 26 y += mod ; 27 e[++top].nxt = head[y] ; 28 e[top].node = x ; 29 head[y] = top ; 30 } 31 32 bool find (ll x) 33 { 34 int y = x % mod ; 35 if (y < 0) 36 y += mod ; 37 for (int i = head[y] ; i ; i = e[i].nxt) { 38 if (e[i].node == x) 39 return true ; 40 } 41 return false ; 42 } 43 44 int main () 45 { 46 //freopen ("a.txt" , "r" , stdin) ; 47 int T ; 48 scanf ("%d" , &T) ; 49 int ans = 0 ; 50 while (T--) { 51 scanf ("%d%d" , &n , &k) ; 52 for (int i = 1 ; i <= n ; i++) { 53 scanf ("%d" , &a[i]) ; 54 } 55 sum[0] = 0 ; 56 for (int i = 1 ; i <= n ; i++) { 57 if (i & 1) 58 sum[i] = sum[i - 1] + a[i] ; 59 else 60 sum[i] = sum[i - 1] - a[i] ; 61 } 62 init () ; 63 bool flag = 0 ; 64 for (int i = n ; i > 0 && !flag ; i--) { 65 insert (sum[i]) ; 66 ll w ; 67 if (i & 1) 68 w = sum[i - 1] + k ; 69 else 70 w = sum[i - 1] - k ; 71 if (find (w)) 72 flag = true ; 73 } 74 if (flag) 75 printf ("Case #%d: Yes.\n" , ++ans ) ; 76 else 77 printf ("Case #%d: No.\n" , ++ans ) ; 78 } 79 return 0 ; 80 }
ps:另外用lower_bound + sort也能办到
hdu 5183. Negative and Positive (哈希表)
标签:
原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4330748.html