前9个样例都过了,第10个出现了神秘情况,有大佬能帮帮忙吗?
//题目入口
https://www.xinyoudui.com/ac/contest/777001D2100060F03BA8EB6/problem/6290
#include <bits/stdc++.h>
using namespace std;
int w;
long long s[200005];
map <int,int> mp;
int t[200005];//桶里装每个map值各有多少个
int main()
{
s[0]=0;
for(int i=1;i<=200005;i++){
s[i]=s[i-1]+i-1;
}//计算某个数重复i次可增加的方案数
cin>>w;
while(w--){
int n;
cin>>n;
long long ans=0;
memset(t,0,sizeof t);
mp.clear();//初始化
int tt,tmax=0;
for(int i=1;i<=n;i++){
cin>>tt;
mp[tt]++;
t[mp[tt]]++;
t[mp[tt]-1]--;
if(mp[tt]>tmax){
tmax=mp[tt];//下标最大的桶的下标
}
}
for(int i=1;i<=tmax;i++){
ans+=s[i]*t[i];//数重复i次可增加的方案数*刚好重复i次数个数
}
ans+=(mp[1]*mp[2]);//1和2的特殊情况
cout<<ans<<"\n";
}
return 0;
}