Posted on 2009-09-03 01:53
Uriel 阅读(405)
评论(0) 编辑 收藏 引用 所属分类:
POJ 、
模拟
模拟ACM比赛的boarding,WA 14 次,搞了两天,在群里还问了,搞得很囧,太痛苦了
注意:如果一个队一题都没AC但是WA了几次的要排在一次都没交过的队之后。。WA 14次就因为这不清楚。。。
/**//*Problem: 2379 User: Uriel
Memory: 592K Time: 16MS
Language: C++ Result: Accepted*/
#include<stdio.h>
#include<stdlib.h>
struct M{
int tm;//记录总时间
int pb;//记录AC的题数
int flag;//记录该队编号
int syl;//记录是否提交过该题
int J[50];//记录该题是否AC
int W[50];//记录罚时
}T[1010];
struct In{
int c;
int p;
int t;
int r;
}Q[1010];
int cmp1( const void *a , const void *b )
{
struct M *c = (M *)a;
struct M *d = (M *)b;
if(c->pb != d->pb)return d->pb - c->pb;
if(c->tm != d->tm)return c->tm - d->tm;
return c->flag - d->flag;
}
int cmp( const void *a ,const void *b)
{
return (*(struct In *)a).t > (*(struct In *)b).t ? 1 : -1;
}
int i,c,p,t,r,C,N,j;
int main()
{
scanf("%d %d",&C,&N);
for(i=1;i<=C;i++)
{
T[i].tm=0;
T[i].pb=0;
T[i].flag=i;
for(j=1;j<50;j++)
{
T[i].J[j]=0;
T[i].W[j]=0;
}
}
for(i=0;i<N;i++)
{
scanf("%d %d %d %d",&Q[i].c,&Q[i].p,&Q[i].t,&Q[i].r);
}
qsort(Q,N,sizeof(Q[0]),cmp);
for(i=0;i<N;i++)
{
if(Q[i].r==1 && !T[Q[i].c].J[Q[i].p])
{
T[Q[i].c].pb++;
T[Q[i].c].J[Q[i].p]=1;
T[Q[i].c].tm+=Q[i].t+T[Q[i].c].W[Q[i].p];
}
else if(Q[i].r==0 && !T[Q[i].c].J[Q[i].p])
{
T[Q[i].c].W[Q[i].p]+=1200;
}
}
for(i=1;i<=C;i++)T[i].flag=i;
qsort(&T[1],C,sizeof(T[1]),cmp1);
for(i=1;i<C;i++)printf("%d ",T[i].flag);
printf("%d\n",T[C].flag);
system("PAUSE");
return 0;
}