[C++] 純文本查看 復制代碼
#include<stdio.h>
#include<string.h>
int A[2000][5000] ;
int count[5030] ;
int main(){
//freopen("test.txt","r",stdin) ;
int T ,N ;
scanf("%d",&T ) ;
char in[5030] ,first[5030];
for (int t=1 ;t<=T && printf("Case #%d: ",t);t++ ){
scanf("%d",&N ) ;
//set_first ---------
int L=0 ;
gets(in);gets(in) ;
first[L]=in[0];A[0][0]=1 ;
for (int i=1 ,l=strlen(in);i<l;i++ ){
if (in==in[i-1])A[0][L]++ ;
else {
L++ ;
first[L]=in ;
A[0][L]=1 ;
}
}
//set_else ----------
int i=1 ,ok=1 ;
for (i ;i< N && ok ;i++){
A[0]=1 ;
int r=0 ;
gets(in) ;
//
if (in[0]!=first[0]){
i++ ;
ok=0 ;
break ;
}
//
for (int j=1 ,l=strlen(in);j<l;j++ ){
if (in[j]==in[j-1]){
A[r]++ ;
continue ;
}
r++ ;
if (in[j]!=first[r]){
ok=0 ;
break ;
}
else A[r]=1 ;
}
if (r!=L)ok=0 ;
}
//sort --------------
if (ok==0){
for (;i<N;i++)gets(in) ;
puts("Fegla Won") ;
}
else {
int Ans=0 ;
for (int i=0 ;i<=L ;i++ ){
//find Me ---
memset(count,0,sizeof(count)) ;
for (int j=0 ;j<N ;j++ ){
count[ A[j] ]++ ;
}
int mid=(N+1)/2 ,Me ;
for (int j=1 ;j<=5000; j++ ){
mid-=count[j] ;
if (mid<=0){
Me=j ;
break ;
}
}
for (int j=1 ;j<Me;j++ )Ans+=count[j]*(Me-j) ;
for (int j=Me ;j<=5000;j++ )Ans+=count[j]*(j-Me) ;
}
printf("%d\n",Ans) ;
}
}
}