poj2379 结构体复杂应用

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

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


然后进行统计各个队的成绩,注意可能会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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值