比赛 |
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;
}