Merge, sort, and enumerate.
In each of the five arrays, the question "add up" and "0" is selected.
At first, we wanted to use the 200*200*200 and 200*200 ratios. Indeed, it is.
Later I learned 200*200,200*200,200.
First, 200*200 enumeration, sorting, and deduplication. Then the three elements add up and fine-tune two 200*200 pointers.
This question uses % LLD for WA. Use % i64d. Contribute n more TLE. N multiple wa. Angry brush sense of presence.
# Include <cstdio> # include <cstring> # include <string> # include <queue> # include <algorithm> # include <map> # include <stack> # include <iostream> # include <list> # include <set> # include <cmath> # define INF 0x7fffffff # define EPS 1e-6 # define ll long longusing namespace STD; ll num [5] [201]; ll sum1 [201*201]; ll sum2 [201*201]; int main () {// freopen ("in.txt ", "r", stdin); // freopen ("2", "W", stdout); int t; scanf ("% d", & T ); while (t --) {Int N; scanf ("% d", & N); For (INT I = 0; I <5; I ++) for (Int J = 0; j <n; j ++) scanf ("% i64d", & num [I] [J]); int len1 = 0, len2 = 0; for (INT I = 0; I <n; I ++) for (Int J = 0; j <n; j ++) sum1 [len1 ++] = num [0] [I] + num [1] [J]; for (INT I = 0; I <n; I ++) for (Int J = 0; j <n; j ++) sum2 [len2 ++] = num [2] [I] + num [3] [J]; sort (sum1, sum1 + len1); sort (sum2, sum2 + len2); sort (Num [4], num [4] + n); int L1 = unique (sum1, sum1 + len1)-sum1; int L2 = unique (sum2, Sum2 + len2)-sum2; bool flag = 0; Int J, K; For (INT I = 0; I <n &&! Flag; I ++) {for (j = 0, K = l2-1; j <L1 & K> = 0 ;) {If (sum1 [J] + sum2 [k] + num [4] [I] = 0) {flag = 1; break ;} else if (sum1 [J] + sum2 [k] + num [4] [I]> 0) k --; else J ++ ;}} if (FLAG) puts ("yes"); else puts ("no ");}}
HDU 4334 trouble