HDU 4334 Trouble
2012-08-25 16:51
267 查看
和POJ1840有点像,但这里只需判断有没有解,一个简单的hash就可以搞定,以后不能滥用vector,自己手写邻接表。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> typedef __int64 LL; const int MAXN = 205; const LL prime = 1000007; int head[prime + 3], e, next[MAXN * MAXN]; LL val[MAXN * MAXN]; LL s1[MAXN], s2[MAXN], s3[MAXN], s4[MAXN], s5[MAXN]; int hash(LL sum) { int key; if(sum > 0) key = (int)(sum % prime); else key = (int)(-sum % prime); return key ; } void add(int key, LL sum) { val[e] = sum; next[e] = head[key]; head[key] = e ++; } int main(){ int N, n, i, j, k, key; LL sum; scanf("%d", &N); while(N --) { scanf("%d", &n); for(i = 0; i < n; i ++) scanf("%I64d", &s1[i]); for(i = 0; i < n; i ++) scanf("%I64d", &s2[i]); for(i = 0; i < n; i ++) scanf("%I64d", &s3[i]); for(i = 0; i < n; i ++) scanf("%I64d", &s4[i]); for(i = 0; i < n; i ++) scanf("%I64d", &s5[i]); memset(head, -1, sizeof head); e = 0; for(i = 0; i < n; i ++) for(j = 0; j < n; j ++) { sum = s1[i] + s2[j]; key = hash(sum); add(key, sum); } bool flag = false; for(i = 0; i < n && !flag; i ++) for(j = 0; j < n && !flag; j ++) for(k = 0; k < n; k ++) { sum = s3[i] + s4[j] + s5[k]; int s = hash(-sum); for(int x = head[s]; x != -1; x = next[x]) { if(sum + val[x] == 0) flag = true; if(flag) break ; } } if(flag) printf("Yes\n") ; else printf("No\n") ; } return 0 ; }
相关文章推荐
- hdu 4334 Trouble
- HDU - 4334 Trouble(贪心|哈希)
- hdu 4334 Trouble (分治缩小复杂度)
- HDU 4334 Trouble [二分哈希]
- [HDU 4334] Trouble (分治+二分查找)
- (HDU - 4334)Trouble
- HDU 4334 Trouble(哈希|线性查找)
- HDU 4334 Trouble 和 HDU 1496 Equations( hash)
- 【HDU 4334 Trouble 】哈希表
- HDU 4334 Trouble (数组合并)
- HDU-4334 Trouble 哈希表Or有序表查找
- hdu 4334 Trouble
- Trouble&&http://acm.hdu.edu.cn/showproblem.php?pid=4334
- HDU4334——贪心(卡二分)——Trouble
- HDU 4334 Trouble
- HDU 4334 Trouble
- HDU 4334 Trouble (数组合并)
- hdu 4334 Trouble(两个数组寻找目标和)
- HDU 4334 Trouble (暴力)
- hdu 4334 Trouble