linkkkk
题意:
思路:
贪心的考虑,尽可能的将字符串变成出现最多的字母是最优的。
对于每一个字符串记录一下长度和出现最多的字母个数,最大美丽值就是
m
i
n
(
长
度
,
出
现
最
多
字
母
个
数
+
操
作
次
数
)
min(长度,出现最多字母个数+操作次数)
min(长度,出现最多字母个数+操作次数)
如果仅仅出现了一种字母,仅操作一次的话,最大值就是长度
−
1
-1
−1
代码:
#include<bits/stdc++.h>
using namespace std;
string s[4];
int n;
struct node{
int len,id;
}a[4];
bool cmp(node a,node b){
return a.len>b.len;
}
int cul(string s){
int cnt=0,len=s.size();
map<int,int>mp;
for(int i=0;s[i];i++){
mp[s[i]]++;
cnt=max(cnt,mp[s[i]]);
}
if(mp.size()==1&&n==1) return len-1;
return min(len,cnt+n);
}
string name[]={"","Kuro","Shiro","Katie"};
int main(){
cin>>n;
for(int i=1;i<=3;i++){
cin>>s[i];
a[i].len=cul(s[i]);
a[i].id=i;
}
sort(a+1,a+1+3,cmp);
if(a[1].len!=a[2].len) cout<<name[a[1].id]<<endl;
else cout<<"Draw";
return 0;
}