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

· · 题解

题目大意

n 个长度为 m 的字符串,每次可以更改某个字符串的某个字母,求最少操作多少次可以使这些字符串变相同。

思路分析

我们一位一位考虑,为了让操作次数尽可能少,我们就希望有尽可能多的位置不改变。

所以我们统计每一位出现次数最多的字母,然后把其他的字母改成和出现次数最多的字母相同的字母即可。

最后统计次数就完成了。

代码实现

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s[105];
int ans=0,a[27];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>s[i];
    for(int i=0;i<m;i++)
    {
        int maxx=-1;
        for(int j=1;j<=26;j++) a[j]=0;
        for(int j=0;j<n;j++) a[s[j][i]-'a'+1]++;
        for(int j=1;j<=26;j++) maxx=max(a[j],maxx);
        ans+=(n-maxx);
    }
    cout<<ans;
    return 0;
}