贪心
题目描述
牛牛注射了第二支虚空基因组,重新夺回了王之力,而牛能则想为王的诞生献上礼炮!
有一串长度为nn的小写字母组成的字符串,牛能可以从中挑选‘k’ ‘i’ ‘n’ ‘g’四个字符组成一支礼炮,或者从中挑选‘k’ ‘i’ ‘n’ ‘g’ ‘i’ ‘n’ ‘g’七个字符组成两支礼炮。请问牛能为王的诞生最多能献上多少礼炮?
题目分析
很显然,一共有三种情况,都是king,既有King,也有kinging,都是kinging,但是题目问的是最多能献上多少礼炮,所以要让kinging出现的次数尽可能的多,那么我们可以先计算这四个字母出现的个数,然后分情况讨论。
#include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 1e7 + 10; int vis[maxn]; char s[maxn]; int n, a, b, c, d; int main() { scanf("%d", &n); getchar(); scanf("%s", s); for (int i = 0; i < n; ++i) { if (s[i] == 'k') ++a; if (s[i] == 'i') ++b; if (s[i] == 'n') ++c; if (s[i] == 'g') ++d; } int cnt = min(b, min(c, d)); if (cnt >= 2 * a)//如果比k字母的两倍还大那么都是kinging了,直接两倍输出就行 printf("%d\n", a * 2); else printf("%d\n", cnt); }