题目给的数据不是按照时间来的,而是打乱的,需要先进行排序
输入数据后进行一次快排,结构体快排需要熟练
然后进行统计各个队的成绩,注意可能会A了之后还会A或者WA一次
之后再对统计结构进行排序:按照做题数目-> 时间 -> 序号 输出
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct str
{
int c,p,t,r;
}a[1005];
struct strans
{
int tn,pos;
int pro[25];
int tag[25];
int sum;
}b[1005];
int cmpa(const void *x,const void *y)
{
struct str *A=(struct str *)x;
struct str *B=(struct str *)y;
if(A->c==B->c){
if(A->p==B->p)
return A->t-B->t;
return A->p-B->p;
}
return A->c-B->c;
}
int cmpb(const void *x,const void *y)
{
struct strans *A=(struct strans *)x;
struct strans *B=(struct strans *)y;
if(A->sum==B->sum){
if(A->tn==B->tn)
return A->pos-B->pos;
if(A->tn!=0&&B->tn!=0)
return A->tn-B->tn;
return B->tn-A->tn;
}
return B->sum-A->sum;
}
int main()
{
int N,C;
scanf("%d%d",&C,&N);
for(int i=1;i<=N;i++)
scanf("%d%d%d%d",&a[i].c,&a[i].p,&a[i].t,&a[i].r);
qsort(a+1,N,sizeof(a[0]),cmpa);
memset(b,0,sizeof(b));
for(int i=1;i<=C;i++)
b[i].pos=i;
for(int i=1;i<=N;i++){
if(a[i].r&&b[a[i].c].tag[a[i].p]==0){
b[a[i].c].tn+=a[i].t+b[a[i].c].pro[a[i].p]*1200;
b[a[i].c].tag[a[i].p]=1;
b[a[i].c].sum++;
}
else
b[a[i].c].pro[a[i].p]++;
}
qsort(b+1,C,sizeof(b[0]),cmpb);
for(int i=1;i<C;i++)
printf("%d ",b[i].pos);
printf("%d\n",b[C].pos);
return 0;
}

本文介绍了一种算法实现,用于处理竞赛成绩数据,包括数据排序、统计及输出,遵循特定规则以实现高效的数据处理。

205

被折叠的 条评论
为什么被折叠?



