题目大意:给出4个数组,在4个数组中各取一个值相加,求出结果等于0的组合个数
解题思路:枚举1 2俩组相加的结果并保存到b,然后枚举3 4俩组相加结果,用二分搜索是否存在b中,若存在则个数加1
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
int a[4][10000];
int b[16000000];
int cou2;
int main() {
cin >> n;
while(n--) {
cin >> m;
int cou = 0;
for(int i = 0; i < m; i++) {
for(int j = 0; j < 4; j++) {
cin >> a[j][i];
}
}
cou2 = 0;
for(int i = 0; i < m; i++) {
for(int j = 0; j < m; j++) {
int k = a[0][i] + a[1][j];
b[cou] = k;
cou++;
}
}
sort(b, b+cou);
for(int i = 0; i < m; i++) {
for(int j = 0; j < m; j++) {
int k = 0 - a[2][i] - a[3][j];
int k2 = upper_bound(b, b+cou, k) - lower_bound(b, b+cou, k);
cou2+=k2;
}
}
cout << cou2 << endl;
if(n) {
cout << endl;
}
}
return 0;
}