这道题目,我本来当场就该过的…结果数组开小了一位,让我以为是map本身盛不下long long,导致让想用双哈希,双指针匹配,二分查找。
其实最开始的借用map实现桶排序的具体细节就可以。直接对应着找到上一个即可:我实在是太呆了!!!因为数组越界死了多少次了???
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[1000005];
signed main()
{ map<long long ,int>ma;
int t ;
scanf("%lld",&t);
while(t--)
{ ma.clear();
int n ;
int ping,sum =0;
scanf("%lld",&n);
for(int i =1 ;i<=n;i++)
{
int hi ;
scanf("%lld",&hi);
a[i]=hi;
sum+=hi;
}
int ans=0,zhi;
for(int i =1 ;i<=n;i++)
{
zhi =2*sum-n*a[i];
ans+=ma[n*a[i]];
ma[zhi]++;
}
cout<<ans<<endl;
}
return 0 ;
}