hdu 5229 找规律

时间:2023-03-09 19:20:50
hdu   5229          找规律

假设选择了字符串a和b:

假设两人都按照最聪明的策略,那么观察一下可以找出规律:当a和b的字符串长度之和为奇数的时候zcc会败。

另外当a==b的时候zcc也会败(当时做的时候忘了这个了T^T)

接下来程序就好写了。总方案数是C(N,2)=N*(N-1)

判重要用map。

最后别忘了化简分数。

 #include <iostream>
#include<cstring>
#include<map>
#include<vector>
using namespace std;
string s;
int T,N,l;
int ee[],oo[];
string ss[]; int gcd(int a,int b)
{
if(a<b) swap(a,b);
if(b==) return a;
else return (gcd(b,a%b));
} int main()
{
cin>>T;
while(T--)
{
memset(ee,,sizeof(ee));
memset(oo,,sizeof(oo));
map<string,int> ht;
cin>>N;
int le=,lo=,lx=;
for(int i=;i<=N;i++)
{
cin>>s;
ss[i]=s;
l=s.length();
if(ht.count(s))
{
//cout<<ht[s]<<endl;
lx+=ht[s];
ht[s]++;
}
else
ht.insert(pair<string,int>(s,));
if(l%==)
{
ee[i]=;
le++;
}
else
{
oo[i]=;
lo++;
}
}
//int lx=le*(le-1)/2+lo*(lo-1)/2;
lx+=le*lo;
int ly=N*(N-)/;
//cout<<le<<" "<<lo<<" -- "<<lx<<" "<<ly<<endl;
int gg=gcd(lx,ly);
lx=lx/gg; ly=ly/gg;
cout<<lx<<"/"<<ly<<endl;
}
return ;
}