CF24B F1 Champions 题解
Content
有 \(n\) 场已经进行完的赛车比赛,每场比赛给出前 \(m\) 名的名字。在每场比赛中,前 \(10\) 名的选手分别可以获得 \(25,18,15,12,10,8,6,4,2,1\) 分,其他名次的选手不得分。现在给出两种排序方式:
- 先按照得分降序排序,如果得分相同,按照得到第一名的次数降序排序,如果还是相同,就按照得到第二名的次数降序排序,以此类推,直到比较出来为止。
- 先按照得到第一名的次数降序排序,如果次数相同,按照得分降序排序,如果还是相同,就按照得到第二名的次数降序排序,以此类推,直到比较出来为止。
请求出按照两种排序方式排序之后分别得出来的第一名。
数据范围:\(1\leqslant n\leqslant 20,1\leqslant m\leqslant 50\)。
Solution
结构体排序好题。
我们开个结构体,把每个人的名字、得分以及得到的名次的次数情况储存下来:
struct player {
string name;
int score, ranking[57];
}a[1007], b[1007];
然后就是如何通过输入储存了,我们还是利用 \(\texttt{map}\) 将每个人的名字映射到其编号上,每出现一个新的名字,就新开一个空间来存储,并统计这个人的分数和排名情况。
那么为什么要开两组结构体呢?这样好方便排序,所以我们再复制一组相同的结构体,然后按照上面的两个排序方式排序即可,可以写两个 \(\texttt{cmp}\) 函数,然后直接按照上面的方式模拟即可。
Code
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <map>
using namespace std;
const int getscore[51] = {0, 25, 18, 15, 12, 10, 8, 6, 4, 2, 1};
map<string, int> vis;
int n, cnt;
string names;
struct player {
string name;
int score, ranking[57];
}a[1007], b[1007];
bool cmp1(const player& p1, const player& p2) {
if(p1.score != p2.score) return p1.score > p2.score;
else
for(int i = 1; i <= 50; ++i)
if(p1.ranking[i] != p2.ranking[i]) return p1.ranking[i] > p2.ranking[i];
}
bool cmp2(const player& p1, const player& p2) {
if(p1.ranking[1] != p2.ranking[1]) return p1.ranking[1] > p2.ranking[1];
else if(p1.score != p2.score) return p1.score > p2.score;
else
for(int i = 2; i <= 50; ++i)
if(p1.ranking[i] != p2.ranking[i]) return p1.ranking[i] > p2.ranking[i];
}
int main() {
scanf("%d", &n);
while(n--) {
int m;
scanf("%d", &m);
for(int i = 1; i <= n; ++i) {
cin >> names;
if(!vis[names]) {
vis[names] = ++cnt;
a[vis[names]].name = names;
}
a[vis[names]].score += getscore[i];
a[vis[names]].ranking[i]++;
}
}
for(int i = 1; i <= cnt; ++i) b[i] = a[i];
sort(a + 1, a + cnt + 1, cmp1);
sort(b + 1, b + cnt + 1, cmp2);
cout << a[1].name << endl << b[1].name;
return 0;
}
CF24B F1 Champions 题解的更多相关文章
- CodeForces 24B F1 Champions(排序)
B. F1 Champions time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 24B F1 Champions
传送门 题目 Formula One championship consists of series of races called Grand Prix. After every race driv ...
- hdu-4893
http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意: 给定一个数组a,一开始数组里面的元素都是0,现在有三个操作: 操作1:给第k个数字加上d. 操作2 ...
- 靶形数独 (codevs 1174)题解
[问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“ ...
- “玲珑杯”ACM比赛 Round #12题解&源码
我能说我比较傻么!就只能做一道签到题,没办法,我就先写下A题的题解&源码吧,日后补上剩余题的题解&源码吧! A ...
- usaco training 4.2.4 Cowcycles 题解
Cowcycles题解 Originally by Don Gillies [International readers should note that some words are puns on ...
- NOIP 2014 提高组 题解
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
- bzoj usaco 金组水题题解(2.5)
bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...
- P1962 斐波那契数列-题解(矩阵乘法扩展)
https://www.luogu.org/problemnew/show/P1962(题目传送) n的范围很大,显然用普通O(N)的递推求F(n)铁定超时了.这里介绍一种用矩阵快速幂实现的解法: 首 ...
随机推荐
- 查询多个count展示结果
<select id="getCountByDISC" resultType="com.rm.algo.entity.AlgoResult"> SE ...
- IPv6 寻址方式简介
在计算机网络中,寻址模式是指在网络上托管地址的机制.IPv6 提供了多种类型的模式,可以通过这些模式对单个主机进行寻址.也可以同时对多个主机进行寻址或者寻址最近距离的主机. 单播寻址 在单播寻址方式 ...
- python并行计算之mpi4py的安装与基本使用
技术背景 在之前的博客中我们介绍过concurrent等python多进程任务的方案,而之所以我们又在考虑MPI等方案来实现python并行计算的原因,其实是将python的计算任务与并行计算的任务调 ...
- 【状压dp】Hamiton路径
描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点 ...
- 2.MaxSubArray-Leetcode
题目:最大连续子序列和 思路:动态规划 状态转移方程 f[j]=max{f[j-1]+s[j],s[j]}, 其中1<=j<=n target = max{f[j]}, 其中1<=j ...
- 01 Windows安装C语言环境
安装C语言运行环境 双击打开安装文件,进行安装 配置环境变量 将: C:\MinGW\bin;添加到Path变量里面. 验证环境变量是否成功 gcc –v 出现如下图所示,证明安装成功
- Yarn 容量调度器多队列提交案例
目录 Yarn 容量调度器多队列提交案例 需求 配置多队列的容量调度器 1 修改如下配置 SecureCRT的上传和下载 2 上传到集群并分发 3 重启Yarn或yarn rmadmin -refre ...
- Hadoop入门 运行环境搭建
模板虚拟机 目录 模板虚拟机 1 硬件 2 操作系统 3 IP地址和主机名称 vm windows10 Hadoop100服务器 远程访问工具 其他准备 克隆虚拟机 克隆 修改主机名/ip 安装jdk ...
- Ubuntu 14.04 升级到 Ubuntu16.04
Ubuntu 14.04 升级到 Ubuntu16.04 1). 更改source.list 源 (24条消息) Ubuntu16.04 source.list更改源_dylan的博客-CSDN博客_ ...
- C语言大小端判定
要判定大小端?需要弄清以下几个问题: 1.当一个变量占多个字节时,变量的指针指向的是低地址 2.什么是大小端? 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 小 ...