假设选择了字符串a和b:
假设两人都按照最聪明的策略,那么观察一下可以找出规律:当a和b的字符串长度之和为奇数的时候zcc会败。
另外当a==b的时候zcc也会败(当时做的时候忘了这个了T^T)
接下来程序就好写了。总方案数是C(N,2)=N*(N-1)
判重要用map。
最后别忘了化简分数。
1 #include <iostream> 2 #include<cstring> 3 #include<map> 4 #include<vector> 5 using namespace std; 6 string s; 7 int T,N,l; 8 int ee[20010],oo[20010]; 9 string ss[20010]; 10 11 int gcd(int a,int b) 12 { 13 if(a<b) swap(a,b); 14 if(b==0) return a; 15 else return (gcd(b,a%b)); 16 } 17 18 int main() 19 { 20 cin>>T; 21 while(T--) 22 { 23 memset(ee,0,sizeof(ee)); 24 memset(oo,0,sizeof(oo)); 25 map<string,int> ht; 26 cin>>N; 27 int le=0,lo=0,lx=0; 28 for(int i=1;i<=N;i++) 29 { 30 cin>>s; 31 ss[i]=s; 32 l=s.length(); 33 if(ht.count(s)) 34 { 35 //cout<<ht[s]<<endl; 36 lx+=ht[s]; 37 ht[s]++; 38 } 39 else 40 ht.insert(pair<string,int>(s,1)); 41 if(l%2==0) 42 { 43 ee[i]=1; 44 le++; 45 } 46 else 47 { 48 oo[i]=1; 49 lo++; 50 } 51 } 52 //int lx=le*(le-1)/2+lo*(lo-1)/2; 53 lx+=le*lo; 54 int ly=N*(N-1)/2; 55 //cout<<le<<" "<<lo<<" -- "<<lx<<" "<<ly<<endl; 56 int gg=gcd(lx,ly); 57 lx=lx/gg; ly=ly/gg; 58 cout<<lx<<"/"<<ly<<endl; 59 } 60 return 0; 61 }
时间: 2024-10-13 11:38:19