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 ...
随机推荐
- Wireshark 捕捉本地数据 --WinPcap切换NPcap
Wireshark默认匹配安装的是WinPcap,但是WinPcap有个缺点,不能抓取本地回环数据 NPcap是在WinPcap的基础上进行优化开发的,可以抓取本地数据 如果已安装WinPcap的请卸 ...
- redhat7 防火墙设置
查看防火墙的状态# firewall-cmd --staterunning # systemctl stop firewalld //关闭防火墙服务# systemctl start firewa ...
- IntelliJ IDEA 设置代码提示或自动补全的快捷键(Alt+/)
点击 文件菜单(File) –> 点击 设置(Settings… Ctrl+Alt+S), –> 打开设置对话框.在左侧的导航框中点击 KeyMap. 接着在右边的树型框中选择 Main ...
- hdu 6180 Schedule
Schedule Problem Description There are N schedules, the i-th schedule has start time si and end time ...
- MVC ---- Lambda表达式
Lambda表达式是比匿名函数还简洁的一种匿名方法语法 Lambda表达式缩写推演 new Func<string,int>(delegate(string str){return str ...
- Goroutines和Channels(一)
Go语言中的并发程序可以用两种手段来实现.本章讲解goroutine和channel,其支持“顺序通信进程”(communicating sequential processes)或被简称为CSP.C ...
- air for android 使用ANE来获取安卓手机IMEI号
一首页创建一个ANE文件 1 使用FlashBuilder 或者Eclipse 创建一个新的android项目 A 创建文件Extension.java package com.dabing. ...
- Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出
Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...
- 解决SpringBoot更新数据到MySQL乱码问题
怀疑数据库没有采用UTF8编码. DB也是UTF8格式,没有问题. 怀疑Hibernate连接字符串问题. application.properties修改为通过utf8连接mysql,但是问题依然没 ...
- vs2010打包安装
[WinForm] VS2010发布.打包安装程序(超全超详细) 2017年02月17日 21:47:09 y13156556538 阅读数:16487更多 个人分类: C#winform 1. ...