先统计每个班级里有几对是可以的 在统计总的有几对可以 答案就是相减,因为重复计算所以答案还要除以二
统计方法直接二分
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include <stack>
//#include<bits/stdc++.h>
#define MAXN 1000005
#define MAXV 10005
#define ssp system("pause")
using namespace std;
typedef long long ll;
int main()
{
int T;
cin >> T;
while (T--)
{
ll n, iq;
vector<ll>temp, all;
cin >> n >> iq;
ll ans = 0, cot = 0;
for (int i = 0; i < n; i++)
{
int m;
scanf("%d", &m);
temp.clear();
for (int j = 0; j < m; j++)
{
ll x;
scanf("%lld", &x);
temp.push_back(x);
all.push_back(x);
}
sort(temp.begin(), temp.end());
for (int j = 0; j < temp.size(); j++)
{
ll y = lower_bound(temp.begin(), temp.end(), iq - temp[j]+1) - temp.begin();
cot += (temp.size() - y);
}
}
sort(all.begin(), all.end());
for (int i = 0; i < all.size(); i++)
{
ll x = lower_bound(all.begin(), all.end(), iq - all[i]+1) - all.begin();
ans += (all.size() - x);
}
ans -= cot;
ans /= 2;
cout << ans << endl;
}
return 0;
}