Codeforces Round #482 (Div. 2) B、Treasure Hunt(模拟+贪心)979B
2024-10-20 06:18:38
大致题意
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");
}
最新文章
- Windows服务安装与卸载
- 材价看板(2)- 运行两周的kanban,改进的起点
- perl push an array to hash
- ubuntu vsftp 安装
- 验证整数、小数、实数、有效位小数最简单JavaScript正则表达式
- GA项目体会
- WPF中的ControlTemplate(控件模板)(转)
- 检测是否支持HTML5中的Video标签
- Linux中的文件上传下载
- 检测WIfi是否打开
- User Defined Runtime Attributes
- spark-submit
- Linux中Samba详细安装
- BF算法(朴素的模式匹配算法)
- 线程:Message和Runnable
- Python学习笔记:概要
- ansible学习之路
- Javascripte的原型链之基础讲解
- CODEFORCES掉RATING记 #4
- 阿里云香港B区通过IPV6规避Google验证码
热门文章
- java判断姓是否合格 千家姓
- Java构造函数中调用构造函数
- [poj1509]Glass Beads(最小表示法)
- str_place()替换函数
- ENCODE:DNA 分子元件的百科全书
- Entity Framework Tutorial Basics(12):Model First
- Spark的序列化
- SSH (Struts2+Spring3.0+Hibernate3)框架(一) 理论
- Advanced WordCount
- SpringMVC执行流程(四)