原题:POJ-2379
这个题目....
输入的判定列表不是按时间序的,所以在判断前要根据时间排序!
然后,sort()不是稳定的排序。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct team {
int name;
int num[25];
int v[25];
long long time;
int sum;
}t[1010];
struct submit{
int ci,pi,ti,ri;
}su[1010];
int c,n;
void judge(int ci,int pi,int ti,int ri) {
if(t[ci].v[pi]==1)return ;
if(!ri)
t[ci].num[pi]++;
else {
t[ci].sum++;
t[ci].time=t[ci].time+t[ci].num[pi]*20*60+ti;
t[ci].v[pi]=1;
}
}
int cmp(team a,team b) {
if(a.sum==b.sum){
if(a.time!=b.time)
return a.time<b.time;
else
return a.name<b.name;
}
return a.sum>b.sum;
}
int cmp1(submit a,submit b)
{
if(a.ti!=b.ti)
return a.ti<b.ti;
return a.ri<b.ri;
}
int main() {
int i,ci,pi,ti,ri;
while(~scanf("%d %d",&c,&n)) {
for(i=1; i<=c; i++) {
memset(t[i].num,0,sizeof(t[i].num));
memset(t[i].v,0,sizeof(t[i].v));
t[i].time=0;
t[i].sum=0;
t[i].name=i;
}
for(i=0; i<n; i++)
scanf("%d %d %d %d",&su[i].ci,&su[i].pi,&su[i].ti,&su[i].ri);
sort(su,su+n,cmp1);
for(i=0;i<n;i++)
judge(su[i].ci,su[i].pi,su[i].ti,su[i].ri);
sort(t+1,t+c+1,cmp);
for(i=1;i<c;i++)
printf("%d ",t[i].name);
printf("%d\n",t[i].name);
}
return 0;
}
/*
3 3
1 2 3000 0
1 2 3100 0
2 1 4200 0
*/
。