最终也没能明白错哪里了;
http://acm.timus.ru/problem.aspx?space=1&num=2024
#include <iostream>
#include<cstdio>#include<algorithm>
#include<cstring>
using namespace std;
int b[26];//a记录各个颜色的数目
int a[26];
int main()
{
int i=0;
char tmp;
memset(b,0,sizeof(b));
while(scanf("%c",&tmp)&&(tmp>='a'&&tmp<='z'))
{
tmp-='a';
if(b[(int)tmp]==0)
{
i++;//i用于记录a数组的末尾
}
b[(int)tmp]++;
}
int p,q;
for(p=0,q=0;p<26;p++)
{
if(b[p]!=0)
a[q++]=b[p];
}
sort(a,a+i);//升序排列
int k;
scanf("%d",&k);
int sum=0,j;
for(j=i-1;j>-1&&k>0;j--,k--)//遍历数组,贪心
{
if(a[j]==0)
{
j++;
printf("fuck%d\n",j);
break;
}
sum+=a[j];
}//那么最终j代表贪心的最后一个元素的左边元素的下标
int MinStone=a[j+1];
int t,ans=0;
for(t=0;t<i;t++)
{
if(MinStone==a[t])
{
ans++;
}
}
printf("%d %d\n",sum,ans);
}