zoukankan      html  css  js  c++  java
  • 【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt

    题意:给你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;
    }
  • 相关阅读:
    shell语句for循环
    ls命令详解
    计算机相关概念总结(3)
    计算机相关概念总结(2)
    计算机相关概念总结(1)
    devops的概念
    jenkins无法连接gitlab
    Jenkins创建镜像后无法推送到harbor的问题
    Jenkins+gitlab+maven持续集成
    jenkins打完包在哪里
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/9042881.html
Copyright © 2011-2022 走看看