题解:P15606 [ICPC 2021 Jakarta R] Uniform Maker

· · 题解

可以找出字符串中每个位置出现次数最多的字符,再尝试把其它字符都改成它,最后把改动次数加起来就行了。

#include<bits/stdc++.h>
using namespace std;
int c[128];//该变量统计字符出现次数。
string flag[101];//该变量记录每个字符串。
int main(){
    int n,m;//该变量对应题目。
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>flag[i];
    }//输入。
    int sum=0;//该变量对应改动次数。
    for(int j=0;j<m;j++){
        int maxn=0,p;//该变量记录出现次数最多的字符。
        for(int i=1;i<=n;i++){
            c[flag[i][j]]++;
            if(maxn<c[flag[i][j]])maxn=c[flag[i][j]],p=flag[i][j];
        }//查找每个位置出现次数最多的字符并记录。
        for(int i=1;i<=n;i++){
            if(p!=flag[i][j])sum++;
        }//判断是否需要改动,更改改动次数。
        memset(c,0,sizeof(c));//清空数组,准备下一次查找。
    }
    cout<<sum;
    return 0;
}