没得讲。。为什么这么简单自己想不到。。。
题解讲得挺明白的了,没什么坑点。
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<string,int>que;
int a[2];
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
void init()
{
que.clear();
a[0]=a[1]=0;
}
int main()
{
int T;
cin>>T;
while(T--)
{
init();
int n;
cin>>n;
string s;
int ans=0,fenmu=n*(n-1)/2;
for(int i=0;i<n;i++)
{
cin>>s;
int flag=s.length()%2;
ans+=que[s]+a[!flag];
a[flag]++;
que[s]++;
}
if(ans==0) {cout<<"0"<<endl;continue;}
int d=gcd(fenmu,ans);
if(fenmu==ans) cout<<"1"<<endl;
else cout<<ans/d<<"/"<<fenmu/d<<endl;
}
return 0;
}