oj题解之虚空之力
题目描述
樱满集注射了第二支虚空基因组,重新夺回了王之力,而hx073269则想为王的诞生献上礼炮! 有一串长度为n的小写字母组成的字符串,hx073269可以从中挑选‘k’ ‘i’ ‘n’ ‘g’四个字符组成一支礼炮,或者从中挑选‘k’ ‘i’ ‘n’ ‘g’ ‘i’ ‘n’ ‘g’七个字符组成两支礼炮。请问hx073269为王的诞生最多能献上多少礼炮?输入
第一行一个正整数n,表示字符串长度,n<=10^7。
第二行一串只含有小写字母的字符串。
输出
输出hx073269为王的诞生能献上的最多礼炮数
样例输入输出
样例输入
4
king
样例输出
1
代码如下(示例):
#include<stdio.h>
int main()
{
int x,n,a=0,b=0,c=0,d=0,e;//老二次元了
//说实在话罪恶王冠挺好看的
scanf("%d",&n);
char l;int i;
for(i=0;i<=n;i++)
{
scanf("%c",&l);
if(l=='k') a+=1;//记录k,i,n,g的个数
if(l=='i') b+=1;
if(l=='n') c+=1;
if(l=='g') d+=1;
}
if(b<=c&&b<=d)e=b;
if(c<=d&&c<=b)e=c;//选取i,n,g里的最小值
if(d<=b&&d<=c)e=d;
if(e%2==0)
{//如果这个最小值能被2整除,判断与a的关系确定礼炮数
if(e/2<=a) x=e;//没有a的两倍,放king效率高
if(e/2>a) x=2*a;//大于或等于a的两倍,放kingking效率高
}
if(e%2==1)
{//若这个最小值是个奇数,先给它补一个字母(最小值所对应)
// 如果除以2比k字符数量小,则放礼炮king占比更大,有a个king
// 如果除以2比k字符数量多,则放礼炮kinging占比更大,有2a个
if((e+1)/2<=a) x=e;
if((e+1)/2>a) x=2*a;
}
printf("%d",x);
return 0;
}