题目链接:Problem - 5101
题面:
题意:给定班级数量和我的iq,给定每个班级的人数和每个同学的iq,现在我想要在不同班级选择两个队友使他们的iq和比我高
思路:二分,用一个大的数组去存储所有同学,在开一个二维分开存每个班级的情况,枚举一个队友的情况,然后去大数组去找有多少同学大于差值,然后再去那个班级找同学数量,他们的差值的一半就是答案
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long
vector<int> ve[1005], vee;
int main(){
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--){
int n;
ll k;
cin >> n >> k;
ll sum = 0;
vee.clear();
for(int i = 0; i < n; i++){
ve[i].clear();
int a;
cin >> a;
while(a--){
int b;
cin >> b;
ve[i].push_back(b);
vee.push_back(b);
}
sort(ve[i].begin(), ve[i].end());
}
sort(vee.begin(), vee.end());
for(int i = 0; i < n; i++){
for(int j = 0; j < ve[i].size(); j++){
int a = k - ve[i][j];
int ans = lower_bound(vee.begin(), vee.end(), a + 1) - vee.begin();
int cnt = lower_bound(ve[i].begin(), ve[i].end(), a + 1) - ve[i].begin();
ans = vee.size() - ans;
cnt = ve[i].size() - cnt;
sum += ans - cnt;
}
}
cout << sum / 2 << endl;
}
return 0;
}