Programming Contest Ranking(题解)
Programming Contest Ranking
.
题目描述
Heilongjiang Programming Contest will end successfully! And your task is programming contest ranking.
The following rules rankings:
1. A problem is solved when it is accepted by the judges.
2. Teams are ranked according to the most problems solved;
3. Teams who solve the same number of problems are ranked by least total time. The total time is the sum of the time consumed for each problem solved. The time consumed for a solved problem is the time elapsed from the beginning of the contest to the submittal
of the accepted run plus 20 penalty minutes for every rejected run for that problem regardless of submittal time. Team(s) who firstly solved the problem will have no penalty in the problem. There is no time consumed for a problem that is not solved.
4. Teams who are the same number of problems solved and the same total time are ranked by the most weighting number of problems solved;The weight of the i-th problem is the floor of N/Ci. where N is the number of all teams, and Ci is the number of teams
who solved the i-th problem. The weight of one problem will be 0 if there is no team solved the problem.
输入
The input contains multiple test cases. For each test case,first line contains two integers,N and M,N (1 < N <=200) is the number of all teams,M (6 <= M <=20) is the number of problems;
Then following N lines, there are M+1 items seprated by a space in each.line, corresponding the record of one team . The first item is the name of the team, not exceed 20 letters. Then following M items, each item is:
1. -\- if the team did not submit for the problem;
2. TT\- if the team submitted TT times for the problem,but did not solve it.
3. TT\FT if the team submitted TT times for the problem, FT is the time elapsed from the beginning of the contest to the submittal of the accepted.
1 <= TT <= 32, 1 <= FT<=300, Both TT and FT are integer.
输出
Output ranking result in N lines.
The format of each line is:
Rank (width 3)
Name of team (width 20)
Number of problems solved (width 2)
Total time(width 6)
Weighting Number of problems solved (width 4)
Each item above align right, seprated by a space.
样例输入
6 6
Leifeng 8\135 1\20 1\57 5\230 6\- 3\283
Fighter 7\136 1\15 1\42 6\200 5\- 2\270
AlwaysAK 7\156 1\24 1\31 5\202 5\270 4\-
SoyOnceMore 5\- 6\- 3\- 2\75 -\- -\-
RpRpRp 5\- 3\35 10\- -\- -\- -\-
StartAcm 2\- 3\- 3\- 4\- 1\- -\-
样例输出
1 Leifeng 5 845 9
2 AlwaysAK 5 883 12
3 Fighter 5 883 9
4 RpRpRp 1 75 1
4 SoyOnceMore 1 75 1
6 StartAcm 0 0 0
提示
In the sample, though team Leifeng submitted 8 times for problem A, but they firstly solved problem A, so the time consumed of problem A is 135, not 275.
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
struct timu{
int zhuang;
int wa;
int time;
};
struct date {
char name[50];
int sumtime;
int quan;
int sumt;
struct timu pro[100];
}line[1000];
void ff(int x,int p,char ch[])
{
int i,j;
int y=0;
int m=0;
for(i=0;ch[i]!='\0';i++){
if(ch[i]=='\\'){
line[x].pro[p].wa=m;
m=0;
}else if(ch[i]=='-')
{
line[x].pro[p].zhuang=0;
line[x].pro[p].time=0;
return ;
}else
{
m=m*10+ch[i]-'0';
}
}
line[x].pro[p].zhuang=1;
line[x].pro[p].time=m;//(line[x].pro[p].wa-1)*20
//printf("==>> %s %d---%d\n",ch,line[x].pro[p].wa,line[x].pro[p].time);
}
int cmp (date a,date b)
{
if(a.sumt!=b.sumt)
return a.sumt>b.sumt;
else if(a.sumtime!=b.sumtime)
return a.sumtime<b.sumtime;
else if(a.quan!=b.quan)
return a.quan>b.quan;
else return strcmp(a.name,b.name)<0;
}
int main()
{
int vis[100];
int i,j,sum,num,minn,k;
char ch[100];
while(~scanf("%d %d",&n,&m)){
memset(line,0,sizeof(line));
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++){
scanf("%s",line[i].name);
for(j=0;j<m;j++){
scanf("%s",ch);
ff(i,j,ch);
}
}
for(j=0;j<m;j++){
k=-1;
minn=inf;
for(i=0;i<n;i++){
if(line[i].pro[j].zhuang)
vis[j]++;
if(line[i].pro[j].zhuang!=0&&line[i].pro[j].time<minn){
minn=line[i].pro[j].time;
k=i;
}
}
if(k!=-1){
line[k].pro[j].wa=1;
}
}
//geng xin quan zhi
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(line[i].pro[j].zhuang){
if(vis[j])
line[i].quan+=n/vis[j];
line[i].sumt++;
line[i].sumtime+=line[i].pro[j].time+(line[i].pro[j].wa-1)*20;
}
}
}
k=0;
sort(line,line+n,cmp);
for(i=0;i<n;i++){
if(i!=0&&line[i].sumt==line[i-1].sumt&&line[i].sumtime==line[i-1].sumtime&&line[i].quan==line[i-1].quan)
{
printf("%3d",k+1);
}else {
printf("%3d",i+1);
k=i;
}
printf(" %20s",line[i].name);
printf(" %2d %6d %4d\n",line[i].sumt,line[i].sumtime,line[i].quan);
}
}
return 0;
}
Programming Contest Ranking(题解)的更多相关文章
- M-SOLUTIONS Programming Contest 2020 题解
M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...
- atcoder Keyence Programming Contest 2020 题解
比赛地址 A 题意:给一个\(n*m\)的初始为白色的矩阵,一次操作可以将一行或一列染成 黑色,问至少染出\(k\)个黑点的最少操作次数. \(n\),\(m\)<=100,\(k\)<= ...
- 【AtCoder】Dwango Programming Contest V题解
A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...
- The 15th UESTC Programming Contest Preliminary K - Kidd1ng Me? cdoj1565
地址:http://acm.uestc.edu.cn/#/problem/show/1565 题目: Kidd1ng Me? Time Limit: 3000/1000MS (Java/Others) ...
- Gym 100952F&&2015 HIAST Collegiate Programming Contest F. Contestants Ranking【BFS+STL乱搞(map+vector)+优先队列】
F. Contestants Ranking time limit per test:1 second memory limit per test:24 megabytes input:standar ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- zoj The 12th Zhejiang Provincial Collegiate Programming Contest Capture the Flag
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5503 The 12th Zhejiang Provincial ...
- zoj The 12th Zhejiang Provincial Collegiate Programming Contest Demacia of the Ancients
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5504 The 12th Zhejiang Provincial ...
- 2016 Sichuan Province Programming Contest
2016 Sichuan Province Programming Contest 代码 2016 Sichuan Province Programming Contest A. Nearest Ne ...
随机推荐
- 获取Spring项目配置文件元素
在开发中有时候要获取配置文件里的值,通常可以利用如下方式来读取: public class PropertyUtil { private static Properties p = new Prope ...
- excel的C#操作教程
C# Excel Tutorial http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm How to transfer ...
- xshell5 Linux 上传下载文件
1,先登录身份验证和文件传输ZMODEM 选择自动激活. 2,rpm -qa | grep lrzsz 利用此命令查看是否安装了lrzsz . 如果没有任何反应则是没有安装 若没有安装 yum ins ...
- IIS中添加ftp站点
1.创建Windows账号 右击点击“我的电脑”,选择“管理”打开服务器管理的控制台.展开“服务器管理器”,一路展开“配置”.“本地用户和组”,点“用户”项.然后在右边空白处点右键,选择“新用户”将打 ...
- DPDK的安装与绑定网卡
DPDK的安装有两种方法: 第一种是使用dpdk/tools/setup.sh选择命令字来安装:第二种是自己手动安装.为了更好地熟悉DPDK,我使用第二种方法. 0.设定环境变量 export RTE ...
- python 重复元素排序
def counting_sort(array1, max_val): m = max_val + count = [] * m for a in array1: # count occurences ...
- stack_01
A.添加/移除 A.1.void stack::push(elemValue); // 栈头 添加元素 A.2.void stack::pop(); // 栈头 移除第一个元素 B.随机存取 C.数据 ...
- 《剑指offer》第二十四题(反转链表)
// 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点. #include <iostream> #include &quo ...
- viewpager实现画廊(一屏多个Fragment)效果
本文主要介绍如何利用ViewPager实现Gallery的画廊效果,即一屏显示多个Fragment. 效果图如下: 在 使用Gallery的时候大家会发现有几个问题(1). 无法控制每次滑动只滑动一页 ...
- Object.defineProperty方法 使用
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 语法: Object.defineProperty(obj, pr ...