标题:[求助]比赛计分问题
只看楼主
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
 问题点数:0 回复次数:15 
[求助]比赛计分问题

在 ACM/ICPC 地区赛中,参赛队可以直接提交题目答案,但若答案错误,则再次提交时最后的成绩会受到影响。比赛的测试系统对每次提交的程序进行评判,结果是 AC 或者某种错误,参赛队能看到这个结果。

为了奖励优秀的队伍同时确定进军世界总决赛的资格名单,当两个队伍做出的题目数量相同时,会按照其使用的时间来进行进一步的排名。时间有两个部分,第一是总的解题时间,二是惩罚时间。所谓惩罚时间是指提交程序未通过时被罚的时间,每一次未通过的提交,都会在最终用于排名的时间中增加 20 分钟。对于没解决的题目不计时。

你的程序将读入一张运行结果清单,然后打印出前三名的成绩。

输入

输入文件包含若干测试数据集。

每个测试数据由两个部分组成,第一部分包含了一个正整数,它表示参赛队伍的个数。接下来的几行是每次提交的结果。每行表示一次提交的结果,包括提交时间、队伍编号、问题编号和裁定结果。

当一行中提交时间一项为 0 时,则表示当前的数据集结束。当参赛队伍的个数为 0 时,则表示全部输入的结束。

输出

针对每一组输入,输出前三名的比分,包括队号、做出题数、比赛用时、名次。在输出排名前,要输出“case n”,其中 n 表示当前是第几组输入。

假设:可能有好几队在同一名次。比如如果有几队都是第三名,则将他们全部输出;如果有两队是第二名,则没有第三名。
测试输入
3
12 1 2 yes
14 3 2 no
25 3 1 yes
29 1 1 no
38 3 2 yes
39 2 1 no
45 1 1 no
0
0

期待的输出
case 1:
3 2 83 1
1 1 12 2
2 0 0 3

搜索更多相关主题的帖子: 计分 参赛队 名单 
2006-12-10 12:42
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
得分:0 
难啊
2006-12-10 17:14
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
得分:0 
呼唤高手
2006-12-11 13:47
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
得分:0 
继续呼唤
2006-12-11 19:39
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
得分:0 
呼唤!!!
2006-12-12 12:07
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
得分:0 
加油
2006-12-13 17:32
abcBoy
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-12-13
得分:0 
这题不难,不过太麻烦了,我写得乱,还有注释部分没解决,你自己弄。
一道题就搞这么久,你题哪来的?我怎么都没做过...
[CODE]#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct
{
int no;
int solved;
int waste;
}Queue;
Queue w[1024];
int tag[1024][1024];
bool cmp(Queue x,Queue y)
{
if(x.solved>y.solved)
return true;
else if(x.solved==y.solved&&x.waste<y.waste)
return true;
return false;
}
int main()
{
int t,c,count=0,time,queue,question,i,j;
Queue tmp;
char status[32];
while(scanf("%d",&t)!=EOF&&t)
{
/***********************************
中间还需加对w[]和tag[][]清零的操作
***********************************/
while(scanf("%d",&time)!=EOF&&time)
{
scanf("%d%d%s",&queue,&question,status);
w[queue].no=queue;
if(strcmp(status,"yes")==0)
{
w[queue].solved++;
w[queue].waste+=time+tag[queue][question]*20;
}
else tag[queue][question]++;
}
sort(w+1,w+t+1,cmp);
printf("case %d:\n",++count);
printf("%d %d %d 1\n",w[1].no,w[1].solved,w[1].waste);
tmp=w[1];
i=2;c=j=1;
while(j<4&&i<=t)
{
printf("%d %d %d",w[i].no,w[i].solved,w[i].waste);
if(tmp.solved==w[i].solved&&w[i].waste==tmp.waste)
{
printf(" %d\n",j);
c++;
}
else c=1,printf(" %d\n",j=j+c);
tmp=w[i++];
}
}
return 0;
}[/CODE]
2006-12-13 20:05
abcBoy
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-12-13
得分:0 
[CODE]else c=1,printf(" %d\n",j=j+c);[/CODE]
错了,该改为printf(" %d\n",j=j+c),c=1;
2006-12-13 20:10
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
得分:0 

这是c吗?为什么编译不了?

2006-12-13 20:40
abcBoy
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-12-13
得分:0 
用C++编译,有现成的算法库不利用,让我白写sort,我可不干。
2006-12-13 20:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-108543-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.155220 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved