ACM Rank Table POJ - 2379

本文提供了一道名为 POJ-2379 的编程竞赛题目的解决方案。该题需要处理一系列不按时间顺序排列的输入,并通过自定义排序函数对输入进行时间排序。使用 C++ 实现了数据结构来跟踪每个团队的提交情况,包括问题解决状态、错误次数及总用时。最后根据解题数量和用时对团队进行了排名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题: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
*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值