码迷,mamicode.com
首页 > 其他好文 > 详细

【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt

时间:2018-05-15 22:51:53      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:%s   put   lse   ++i   name   char   scanf   highlight   选择   

题意:给你3个字符串,3个人各对自己的字符串执行n轮操作,每一次选择一个字符变为任意一个和原来不同的字符。最后问你谁能使自己的串中的任意重复子串出现的次数最大化。

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

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

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

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
char a[4][100005];
int b[4][305],A[4],len;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=3;++i){
		scanf("%s",a[i]+1);
		len=strlen(a[i]+1);
		for(int j=1;j<=len;++j){
			++b[i][a[i][j]];
		}
	}
	for(int i=1;i<=3;++i){
		for(int j=‘A‘;j<=‘Z‘;++j){
			if(n<=len-b[i][j]){
				A[i]=max(A[i],b[i][j]+n);
			}
			else if(b[i][j]==len && n==1){
				A[i]=max(A[i],len-1);
			}
			else{
				A[i]=max(A[i],len);
			}
		}
		for(int j=‘a‘;j<=‘z‘;++j){
			if(n<=len-b[i][j]){
				A[i]=max(A[i],b[i][j]+n);
			}
			else if(b[i][j]==len && n==1){
				A[i]=max(A[i],len-1);
			}
			else{
				A[i]=max(A[i],len);
			}
		}
	}
	if(A[1]>A[2] && A[1]>A[3]){
		puts("Kuro");
	}
	else if(A[2]>A[1] && A[2]>A[3]){
		puts("Shiro");
	}
	else if(A[3]>A[1] && A[3]>A[2]){
		puts("Katie");
	}
	else{
		puts("Draw");
	}
	return 0;
}

【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt

标签:%s   put   lse   ++i   name   char   scanf   highlight   选择   

原文地址:https://www.cnblogs.com/autsky-jadek/p/9042881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!