poj2379 结构体复杂应用

来源:互联网 发布:电脑动画制作软件 编辑:程序博客网 时间:2024/04/30 03:23

题目给的数据不是按照时间来的,而是打乱的,需要先进行排序

输入数据后进行一次快排,结构体快排需要熟练


然后进行统计各个队的成绩,注意可能会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;}


0 0
原创粉丝点击