不太清楚为什么unordered_map会超时。map超时可以理解,可unordered_map超时就不讲道理了啊
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<math.h>
#include<string>
#include<string.h>
#include<map>
#include<unordered_map>
#include<unordered_set>
#include<set>
#include<stack>
#include<sstream>
//#include <Eigen/Dense>
//#include <Eigen/Geometry>
//using namespace Eigen;
using namespace std;
long long a[4005], b[4005], c[4005], d[4005];
int main()
{
int t = 0;
cin >> t;
while (t--)
{
int line;
cin >> line;
for (int i = 0; i < line; i++)
cin >> a[i] >> b[i] >> c[i] >> d[i];
long long sum[4005 * 4005];
int k = 0;
for (long long i = 0; i < line; i++)
{
for (long long j = 0; j < line; j++)
{
long long temp = a[i] + b[j];
sum[k++] = temp;
}
}
sort(sum, sum + k);
int cnt = 0;
for (long long i = 0; i < line; i++)
{
for (long long j = 0; j < line; j++)
{
long long temp = c[i] + d[j];
cnt += upper_bound(sum, sum + k, -temp) - lower_bound(sum, sum + k, -temp);
}
}
/*unordered_map<long long, long long> ab, cd;
for (long long i = 0; i < line; i++)
{
for (long long j = 0; j < line; j++)
{
long long sum = a[i] + b[j];
ab[sum]++;
sum = c[i] + d[j];
cd[sum]++;
}
}
long long cnt = 0;
for (auto iter = ab.begin();iter!=ab.end();iter++)
{
cnt += iter->second * cd[-iter->first];
}*/
cout << cnt << endl;
if (t)
cout << endl;
}
return 0;
}