题目

大致题意

n表示要进行n次操作,接着给出三个字符串,表示三个人初始拥有的串。每次操作要替换字符串中的字母,询问最后在游戏中曾出现过的相同的子串谁最多。

思路

(1)  讨论最多的子串,肯定是全部转换成单个的字母是最优的,这样就把子串转换成了讨论出现过最多的字母的问题。接下来只需要模拟,先将初始串中有的最多的字母数统计出来,然后考虑一下剩下的字符数和n的关系就可以了。需要注意的是,初始的字符串是不计入统计的,也就是说,至少在经过一次操作后我们才对它们的最大长度进行比较。

(2)显然只需关注字符而非子串。

枚举每个字符,尽力使其他字符变成它。

只有一种情况需要注意!如果字符a的出现次数等于len,并且n=1,那么你不得不将一个字符a变为其他的字符,最终最多只能有len-1个a.

AC代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<string.h>
using namespace std;
map<char,int>mp;
char s[];
int n;
int so()
{
int ans=-;
mp.clear();
cin>>s;
int len=strlen(s);
for(int i= ; i<len ; i++)
{
mp[s[i]]++;
ans=max(ans,mp[s[i]]);
}
if(ans==len&&n==)
return len-;
else if(ans+n<=len)
return ans+n;
else
return len;
}
int main( )
{
int max1,max2,max3;
scanf("%d",&n);
max1=so(); max2=so();
max3=so();
if(max1>max2&&max1>max3)
puts("Kuro");
else if(max2>max1&&max2>max3)
puts("Shiro");
else if(max3>max1&&max3>max2)
puts("Katie");
else
puts("Draw");
}

最新文章

  1. Windows服务安装与卸载
  2. 材价看板(2)- 运行两周的kanban,改进的起点
  3. perl push an array to hash
  4. ubuntu vsftp 安装
  5. 验证整数、小数、实数、有效位小数最简单JavaScript正则表达式
  6. GA项目体会
  7. WPF中的ControlTemplate(控件模板)(转)
  8. 检测是否支持HTML5中的Video标签
  9. Linux中的文件上传下载
  10. 检测WIfi是否打开
  11. User Defined Runtime Attributes
  12. spark-submit
  13. Linux中Samba详细安装
  14. BF算法(朴素的模式匹配算法)
  15. 线程:Message和Runnable
  16. Python学习笔记:概要
  17. ansible学习之路
  18. Javascripte的原型链之基础讲解
  19. CODEFORCES掉RATING记 #4
  20. 阿里云香港B区通过IPV6规避Google验证码

热门文章

  1. java判断姓是否合格 千家姓
  2. Java构造函数中调用构造函数
  3. [poj1509]Glass Beads(最小表示法)
  4. str_place()替换函数
  5. ENCODE:DNA 分子元件的百科全书
  6. Entity Framework Tutorial Basics(12):Model First
  7. Spark的序列化
  8. SSH (Struts2+Spring3.0+Hibernate3)框架(一) 理论
  9. Advanced WordCount
  10. SpringMVC执行流程(四)