1148: ACM ranking rules

时间限制: 1 Sec  内存限制: 128 MB
提交: 16  解决: 12
[提交][状态][讨论版]

题目描述

ACM contests, like the one you are participating in, are hosted by the special software. That software, among other functions, preforms a job of accepting and evaluating teams' solutions (runs), and displaying results in a rank table. The scoring rules are as follows:

1.         Each run is either accepted or rejected.

2.         The problem is considered solved by the team, if one of the runs submitted for it is accepted.

3.         The time consumed for a solved problem is the time elapsed from the beginning of the contest to the submission of the first accepted run for this problem (in minutes) plus 20 minutes for every other run for this problem before the accepted one. For an unsolved problem consumed time is not computed.

4.         The total time is the sum of the time consumed for each problem solved.

5.         Teams are ranked according to the number of solved problems. Teams that solve the same number of problems are ranked by the least total time.

6.         While the time shown is in minutes, the actual time is measured to the precision of 1 second, and the the seconds are taken into account when ranking teams.

7.         Teams with equal rank according to the above rules must be sorted by increasing team number.

Your task is, given the list of N runs with submission time and result of each run, compute the rank table for C teams.

输入

Input contains integer numbers C N, followed by N quartets of integers ci pi ti ri, where ci -- team number, pi -- problem number, ti -- submission time in seconds, ri -- 1, if the run was accepted, 0 otherwise.

1 ≤ C, N ≤ 1000, 1 ≤ ci ≤ C, 1 ≤ pi ≤ 20, 1 ≤ ti ≤ 36000.

输出

Output must contain C integers -- team numbers sorted by rank.

样例输入

3 3
1 2 3000 0
1 2 3100 1
2 1 4200 1

样例输出

2 1 3

提示

用结构体数组存储各队信息

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<map>
using namespace std; const int N = + ; int c, n;
struct node{
short _time = , solve = , num;
map<int, int> state;
}Node[N]; int main(){
scanf("%d %d", &c, &n);
for(int i = ; i <= c; i++) Node[i].num = i; int ci, pi, ti, ri;
for(int i = ; i <= n; i++){
scanf("%d %d %d %d", &ci, &pi, &ti, &ri);
auto & mp = Node[ci].state;
if(mp[pi] < ) continue;
if(ri == ) mp[pi]++;
if(ri == ) {
Node[ci]._time += (mp[pi] * * + ti);
mp[pi] = -;
Node[ci].solve++;
}
}
auto cmp = [](const node &x, const node &y) -> bool{
if(x.solve != y.solve) return x.solve > y.solve;
return x._time < y._time;
};
stable_sort(Node + , Node + n + , cmp);
for(int i = ; i <= n; i++){
printf("%d%c", Node[i].num, (i == n)?'\n':' ');
}
}

HNUST-1148 ACM ranking rules(简单模拟)的更多相关文章

  1. (hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数&lt;=3,输出剩下的人 )

    题目: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. NYOJ 题目77 开灯问题(简单模拟)

    开灯问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:1           描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 ...

  3. HDU 4772 Zhuge Liang&#39;s Password (简单模拟题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4772 题面: Zhuge Liang's Password Time Limit: 2000/1000 ...

  4. java web学习总结(二十二) -------------------简单模拟SpringMVC

    在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...

  5. WPF简单模拟QQ登录背景动画

    介绍 之所以说是简单模拟,是因为我不知道QQ登录背景动画是怎么实现的.这里是通过一些办法把它简化了,做成了类似的效果 效果图 大体思路 首先把背景看成是一个4行8列的点的阵距,X轴Y轴都是距离70.把 ...

  6. Linux 内核 链表 的简单模拟(2)

    接上一篇Linux 内核 链表 的简单模拟(1) 第五章:Linux内核链表的遍历 /** * list_for_each - iterate over a list * @pos: the & ...

  7. Linux 内核 链表 的简单模拟(1)

    第零章:扯扯淡 出一个有意思的题目:用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量,如 struct student { int a; //FIND(struct stu ...

  8. JavaWeb学习总结(四十九)——简单模拟Sping MVC

    在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...

  9. 简单模拟Hibernate的主要功能实现

    在学习期间接触到Hibernate框架,这是一款非常优秀的O/R映射框架,大大简化了在开发web项目过程中对数据库的操作.这里就简单模拟其底层的实现. /*******代码部分,及其主要注解***** ...

随机推荐

  1. 基于ElementUI,设置流体高度时,固定列与底部有间隙

    基于ElementUI,设置流体高度时,固定列与底部有间隙问题,如下图: 解决办法: 1.fixed流体的高度设置为100%     2.将fixed的滚动内容的最大高度设置为none,bottom为 ...

  2. C++入门经典-例6.11-使用指针变量遍历二维数组

    1:代码如下: // 6.11.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #inc ...

  3. C#操作WMI文章汇总

    http://blog.csdn.net/linux7985/article/details/5698932 http://www.cnblogs.com/ocean2000/archive/2008 ...

  4. 最长不重复子串长度,时间复杂度O(n),空间复杂度O(n),Python实现

    def lengthOfLongestSubstring(s): res = 0 d = {} tmp = 0 start = 0 for i in range(len(s)): if s[i] in ...

  5. Java中 intValue,parseInt,Valueof 这三个关键字的区别

    intValue()是把Integer对象类型变成int的基础数据类型: parseInt()是把String 变成int的基础数据类型: Valueof()是把给定的String参数转化成Integ ...

  6. 迭代器(Iterator)的使用

    迭代器(Iterator)的使用 我这里主要讲一下聚合式迭代器(IteratorAggregate) 因为聚合式迭代器和ArrayIterator配合使用可以直接跳过Iterator需要实现的5个方法 ...

  7. 在CentOS7上搭建Kubernetes

    来源 中文教程 http://blog.51cto.com/devingeng/2096495?from=singlemessage 官方文档 https://kubernetes.io/docs/s ...

  8. 如何解决错误【selenium.common.exceptions.SessionNotCreatedException】

    如何解决错误[selenium.common.exceptions.SessionNotCreatedException]   [问题起因] 2018年12月26日晚,启动我的pycharm准备学习s ...

  9. Selenium 2自动化测试实战15(多表单切换)

    一.多表单切换 在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这 ...

  10. Flex TabNavigator

    1.获取子项个数 TabNavigator.numChildren(int) 2.对于静态的TabNavigator的如何处理权限显示 for(var i:int=0;i <tab.numChi ...