显然组成两支礼炮比组成一支要优,我们就先贪心的组成两支的,然后再将剩下的组成一支的即可
#include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdio> #include<cmath> #define LL long long using namespace std; const int INF=0x3f3f3f3f; int read() { int s=0,bj=0; char ch=getchar(); while(ch<'0'||ch>'9')bj|=(ch=='-'),ch=getchar(); while(ch>='0'&&ch<='9')s=(s<<1)+(s<<3)+(ch^48),ch=getchar(); return bj?-s:s; } void printnum(int x) { if(x>9)printnum(x/10); putchar(x%10^48); } void print(int x,char ch) { if(x<0){putchar('-');x=-x;} printnum(x);putchar(ch); } int n; char ch[100000005]; int aha[26]; int main() { n=read(); scanf("%s",ch+1); for(int i=1;i<=n;++i)++aha[ch[i]-'a']; int num1=aha[10],num2=min(aha[8],min(aha[13],aha[6]));//num1'k'的个数,num2"ing"的个数 int cnt=min(num1,num2/2),ans=cnt*2; num1-=cnt;num2-=cnt*2;//先减掉组成两支的 if(num1&&num2)++ans;//再算组成一支的 print(ans,'\n'); return 0; }