阅读理解题,解题思路是,统计每一列出现次数最多的字母,多种情况的按字典序选取,然后,每一列遍历的时候顺便记录一下有多少个不同的,也就是行数减去最多字母的数量。
#include <cstdio>
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int cas,n,m,i,j,len;
int num_zm[30],out,tm;
char str[55][1005];
char out1[1005];
int max_num;
cin>>cas;
while(cas--)
{
// strcpy(out1, "");
len=0;//答案位置
out=0;//变化次数
cin>>n>>m;
for(i=0;i<n;i++)
cin>>str[i];
for(i=0;i<m;i++)
{
memset(num_zm,0,sizeof(num_zm));
max_num=0;//用于记录最大
for(j=0;j<n;j++)
{
num_zm[int(str[j][i]-'A')]++;
tm=num_zm[int(str[j][i]-'A')];//临时大小
if(tm>max_num)//对比
{
out1[len]=str[j][i];//保存答案
max_num=tm;
}
else if(tm==max_num)//
{
if(str[j][i]<out1[len])
out1[len]=str[j][i];
}
}
out+=n-max_num;
len++;
}
for(i=0;i<m;i++)
{
cout<<out1[i];
}
cout<<endl;
cout<<out<<endl;
}
return 0;
}