牛客小白月赛3 I 排名【结构体排序/较复杂/细节】
链接:https://www.nowcoder.com/acm/contest/87/I
来源:牛客网 题目描述
Cwbc和XHRlyb都参加了SDOI2018,他们特别关心自己的排名。
我们定义每一场比赛每位选手的标准分为它的分数乘以满分再除以比赛中选手所获得的最高分。
NOIP2017的满分为600分,SDOI2018每一天的比赛满分均为300分。
我们定义总分为NOIP2017的标准分的25%,加上SDOI2018 前两天标准分之和的25%,再加上SDOI2018后两天标准分之和的50%。
XHRlyb告诉你每一次比赛每个选手的分数,你需要按照名次从高到低依次输出他们的名字和总分。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
输入描述:
输入数据有多组数据,对于每组数据,格式为:
第一行,一个整数n,表示选手数量。
接下来n行,每一行有用空格隔开的一个字符串和五个整数,分别表示选手姓名、NOIP2017成绩以及SDOI2018四天比赛的成绩。
输出描述:
输出数据应有多组,每组输出有多行,每行应有一个选手姓名和他的总分。
输出的总分应保留5位小数,且如果总分的误差不超过10-,我们认为两名选手并列。
若两名选手并列,则按姓名的字典序顺序从小到大输出。
示例1
输入 tzt
tyc
rqy
cz
hly
zhx
dzm
输出
tyc 589.74138
tzt 574.16667
rqy 539.89262
cz 534.91682
hly 515.95886
zhx 512.77374
dzm 490.38869
备注:
保证姓名均为小写字母且个数在[,]之间,每次比赛的分数不会超过满分也不会低于0分。
保证选手总数不会超过2 ∗ 。
≤ T ≤ 。
【分析】:注意是比赛中 选手 所获得的最高分!纵向比较!
【代码】:
#include<bits/stdc++.h>
/*
7
tzt 570 290 155 300 295
tyc 570 260 225 295 300
rqy 540 275 110 290 290
cz 520 260 130 285 290
hly 490 185 155 290 285
zhx 510 220 110 285 285
dzm 510 185 85 280 280
*/
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000000007
#define inf 0x3f3f3f3f
const int N = *1e5+;
struct node
{
string name;
int s[];
double sum;
}a[N];
bool cmp(node a, node b)
{
//如果总分的误差不超过10-5,我们认为两名选手并列
//两名选手并列,则按姓名的字典序顺序从小到大输出
if (fabs(a.sum-b.sum)<=1e-) return a.name<b.name;
else
return a.sum>b.sum;
} int main()
{
int n;
while(cin>>n)
{ int Max[];
memset(Max,-,sizeof Max);
for(int i=;i<n;i++)
a[i].sum=; for(int i=;i<n;i++)
{
cin>>a[i].name;
for(int j=;j<;j++)
{
cin>>a[i].s[j];
Max[j] = max(Max[j],a[i].s[j]);
}
} for(int i=;i<n;i++)
{
for(int j=; j<; j++)
{
if(j==)
{
a[i].sum += (a[i].s[]*600.0/Max[])*0.25;
}
if(j>&&j<=)
{
a[i].sum += (a[i].s[j]*300.0/Max[j])*0.25;
}
if(j>&&j<)
{
a[i].sum += (a[i].s[j]*300.0/Max[j])*0.5;
}
}
}
sort(a,a+n,cmp); for(int i=;i<n;i++)
{
cout<<a[i].name;
printf(" %.5f\n",a[i].sum);
}
}
}
#include<bits/stdc++.h>
/*
7
tzt 570 290 155 300 295
tyc 570 260 225 295 300
rqy 540 275 110 290 290
cz 520 260 130 285 290
hly 490 185 155 290 285
zhx 510 220 110 285 285
dzm 510 185 85 280 280
*/
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000000007
#define inf 0x3f3f3f3f
const int N = 2*1e5+5;
struct node
{
string name;
int s[5];
double sum;
}a[N];
bool cmp(node a, node b)
{
//如果总分的误差不超过10-5,我们认为两名选手并列
//两名选手并列,则按姓名的字典序顺序从小到大输出
if (fabs(a.sum-b.sum)<=1e-5) return a.name<b.name;
else
return a.sum>b.sum;
} int main()
{
int n;
while(cin>>n)
{ int Max[50];
memset(Max,-1,sizeof Max);
for(int i=0;i<n;i++)
a[i].sum=0; for(int i=0;i<n;i++)
{
cin>>a[i].name;
for(int j=0;j<5;j++)
{
cin>>a[i].s[j];
Max[j]=max(Max[j],a[i].s[j]);
}
} for(int i=0;i<n;i++)
{
a[i].sum += a[i].s[0]*600/(double)Max[0]*0.25;
for(int j=1;j<3;j++)
a[i].sum += a[i].s[j]*300/(double)Max[j]*0.25;
for(int j=3;j<5;j++)
a[i].sum += a[i].s[j]*300/(double)Max[j]*0.5; }
sort(a,a+n,cmp); for(int i=0;i<n;i++)
{
cout<<a[i].name;
printf(" %.5f\n",a[i].sum);
}
}
}
牛客小白月赛3 I 排名【结构体排序/较复杂/细节】的更多相关文章
- 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花
求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...
- 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...
- 牛客小白月赛8 - E - 诡异数字 数位DP
牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...
- 牛客小白月赛18 Forsaken给学生分组
牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 Forsaken有 ...
- 牛客小白月赛18 Forsaken喜欢数论
牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...
- 牛客小白月赛19 E 「火」烈火燎原 (思维,树)
牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...
- 【牛客小白月赛21】NC201604 Audio
[牛客小白月赛21]NC201604 Audio 题目链接 题目大意: 给出三点 ,求到三点距离相等的点 的坐标. 解析 考点:计算几何基础. 初中蒟蒻表示不会什么法向量.高斯消元..qwq 方法一: ...
- 【牛客小白月赛21】NC201605 Bits
[牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数 ...
- 牛客小白月赛16 小石的妹子 二分 or 线段树
牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以. 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化. 怎么处理呢,你仔细想 ...
随机推荐
- 剑指Offer - 九度1390 - 矩形覆盖
剑指Offer - 九度1390 - 矩形覆盖2014-02-05 23:27 题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形 ...
- 常见算法用Pascal实现
基本算法 这些都是非常基本的的算法,希望所有学习的人都能理解! 1.数论算法 求两数的最大公约数 function gcd(a,b:integer):integ ...
- Jmeter测试SOAP协议(Jmeter 3.3)
公司协议都是SOAP协议的,最初在网上看到Jmeter测试soap协议需要插件,但是Jmeter3.2开始就不在支持该插件,后来又查了些资料,找到了解决办法,Jmeter提供专门创建针对soap协议的 ...
- Python爬虫教程
Python爬虫(1):基本原理 Python爬虫(2):Requests的基本用法 Python爬虫(3):Requests的高级用法 Python爬虫(4):Beautiful Soup的常用方法 ...
- Linux下通过tcpdump抓包工具获取信息
介绍 tcpdump是网络数据包截获分析工具.支持针对网络层.协议.主机.网络或端口的过滤.并提供and.or.not等逻辑语句帮助去除无用的信息. tcpdump - dump traffic on ...
- 1、python 循环控制
案例1: lucky_num = 19 input_num = int(input("Input the guess number:")) if input_num == luc ...
- leetcode 174. 地下城游戏 解题报告
leetcode 174. 地下城游戏 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下 ...
- 【bzoj3438】小M的作物 网络流最小割
原文地址:http://www.cnblogs.com/GXZlegend/p/6801522.html 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物 ...
- Android社会化分享功能的实现步骤
众所周知,互联网是一个资源共享的地方,在网络上,我们可以分享我们所有认为好的资源.而随着互联网信息爆发式的增长,我们习惯了一键分享功能,比如:微博分享.微信分享.QQ空间分享.人人网分享等等.由此可见 ...
- BZOJ2125 最短路 【仙人掌最短路】
题目 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. 输入格式 输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个整数v,u,w表示一 ...