比赛 20120807 评测结果 WWWWWWWWWW
题目名称 宁采臣的书架 最终得分 0
用户昵称 Makazeu 运行时间 0.004 s
代码语言 C++ 内存使用 0.29 MiB
提交时间 2012-08-07 11:37:52
显示代码纯文本
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
typedef pair<int,int> Pair;
const int MAXN=111;
int N,K,num[MAXN],res;
class Color{public:int c,n;}C[MAXN];

inline void init()
{
	memset(C,0,sizeof(C));
	for(int i=1;i<=N;i++)
		scanf("%d",&num[i]),num[i]-=24;
	res=0;int nowc=num[1],nown=1;
	for(int i=2;i<=N;i++)
	{
		if(num[i]!=nowc)
		{
			C[++res]=(Color){nowc,nown};
			nowc=num[i];nown=1;
		}
		else nown++;
	}
	C[++res]=(Color){nowc,nown};
}

inline void greedy()
{
	int maxn,minn,minp,minp2,nowc;
	while(1)
	{
		minn=100,minp=-1;
		for(int i=1;i<=res;i++)
		{
			if(C[i].n>=minn) continue;
			minn=C[i].n,minp=i;
		}
		if(K-minn<0) break; K-=minn;
		nowc=C[minp].c,maxn=0,minp2=-1;
		for(int i=1;i<=res;i++)
		{
			if(C[i].n<=maxn) continue;
			maxn=C[i].n,minp2=i;
		}
		C[minp2].n+=minn;
		for(int i=minp;i<=res-1;i++)
			C[i]=C[i+1];
		res--;
		
		if(C[minp].c==C[minp-1].c)
		{
			C[minp-1].n+=C[minp].n;
			for(int i=minp;i<=res-1;i++)
				C[i]=C[i+1];
			res--;
		}
	}
}

int main()
{
	freopen("arrangement.in","r",stdin);
	freopen("arrangement.out","w",stdout);
	scanf("%d%d\n",&N,&K); int T=0;
	while(N!=0 || K!=0)
	{
		T++;
		init();greedy(); printf("Case%d: %d\n\n",T,res);
		scanf("%d%d\n",&N,&K);
	}
	return 0;
}