【洛谷】每日一题-P1786 帮贡排序

2023-05-16

原题链接

P1786 帮贡排序

解析

实现方法

一看题:这不就是道排序吗?
但是——
用啥办法呢?
这自带的排序方法,肯定是不能用了
那么我们就来写一个cmp排序函数吧!
但是——
输出排序呢?
所以得再写一个cmp排序函数······

排序

第一个cmp

注意!不能改变帮主和副帮主的职位!
1.先按照帮贡从大到小排序
2.如果帮贡一样,则按照输入顺序排序
可以从输入的时候就编好号,
然后按从大到小排序

第二个cmp

在这途中按照排好帮贡的顺序分发职位;
1.先按现在的职位排序。
可以手编一个职位转变为数字的函数,假设函数职位越大返回值越小,那么就从小到大排序。
(由于帮主和副帮主职位肯定更大,所以不需要考虑absi2011的权限问题)
2.职位一样,按照等级从大到小排序
3.如果等级一样,则按照输入顺序排序
可以从输入的时候就编好号,
然后按从大到小排序

具体代码实现

1.初始化 and 输入

struct people {
	string name, before, now; //名称,原来的职位,现在的职位
	long long xp; //帮贡(十年OI一场空,不开long long见祖宗)
	int level, id; //等级,输入顺序
};
struct people a[120]; //结构体の数组
cin >> n;
for (int i = 1; i <= n; i++) {
	cin >> a[i].name >> a[i].before >> a[i].xp >> a[i].level;
	a[i].id = i; //提前编号
}

2.第一个cmp

bool cmp1(people a, people b) {
	if (a.xp == b.xp) return a.id < b.id; //如果帮贡一样,按照输入顺序排序
	else return a.xp > b.xp; //否则按照帮贡排序
}
sort(a + 4, a + n + 1, cmp1); //主函数内の排序

3.分发职位

for (int i = 1; i <= n; i++) {
	//按照职位的最大人数分发职位
	if (i == 1) a[i].now = "BangZhu";
	else if (i == 2 || i == 3) a[i].now = "FuBangZhu";
	else if (i == 4 || i == 5) a[i].now = "HuFa";
	else if (i >= 6 && i <= 9) a[i].now = "ZhangLao";
	else if (i >= 10 && i <= 16) a[i].now = "TangZhu";
	else if (i >= 17 && i <= 41) a[i].now = "JingYing";
	else a[i].now = "BangZhong";
}

4.职位转数字

int number(string x) {
	if (x == "BangZhu") return 1;
	else if (x == "FuBangZhu") return 2;
	else if (x == "HuFa") return 3;
	else if (x == "ZhangLao") return 4;
	else if (x == "TangZhu") return 5;
	else if (x == "JingYing") return 6;
	else if (x == "BangZhong") return 7;
}

5.第二个cmp

bool cmp2(people a, people b) {
	if (number(a.now) == number(b.now)) {	//如果现职位一样
		if (a.level == b.level) {
			return a.id < b.id; //如果等级一样,则按照输入顺序排序
		} else {
			return a.level > b.level; //否则按照等级排序
		}
	} else {
		return number(a.now) < number(b.now);  //否则按照现职位排序
	}
}
sort(a + 1, a + n + 1, cmp2);

AC Code

#include <iostream>
#include <algorithm>
using namespace std;

struct people {
	string name, before, now; //名称,原来的职位,现在的职位
	long long xp; //帮贡(十年OI一场空,不开long long见祖宗)
	int level, id; //等级,输入顺序
};
struct people a[120]; //结构体の数组

int n;

int number(string x) {
	if (x == "BangZhu") return 1;
	else if (x == "FuBangZhu") return 2;
	else if (x == "HuFa") return 3;
	else if (x == "ZhangLao") return 4;
	else if (x == "TangZhu") return 5;
	else if (x == "JingYing") return 6;
	else if (x == "BangZhong") return 7;
}

bool cmp1(people a, people b) {
	if (a.xp == b.xp) return a.id < b.id; //如果帮贡一样,按照输入顺序排序
	else return a.xp > b.xp; //否则按照帮贡排序
}

bool cmp2(people a, people b) {
	if (number(a.now) == number(b.now)) {	//如果现职位一样
		if (a.level == b.level) {
			return a.id < b.id; //如果等级一样,则按照输入顺序排序
		} else {
			return a.level > b.level; //否则按照等级排序
		}
	} else {
		return number(a.now) < number(b.now);  //否则按照现职位排序
	}
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].name >> a[i].before >> a[i].xp >> a[i].level;
		a[i].id = i; //提前编号
	}

	sort(a + 4, a + n + 1, cmp1);

	for (int i = 1; i <= n; i++) {
		//按照职位的最大人数分发职位
		if (i == 1) a[i].now = "BangZhu";
		else if (i == 2 || i == 3) a[i].now = "FuBangZhu";
		else if (i == 4 || i == 5) a[i].now = "HuFa";
		else if (i >= 6 && i <= 9) a[i].now = "ZhangLao";
		else if (i >= 10 && i <= 16) a[i].now = "TangZhu";
		else if (i >= 17 && i <= 41) a[i].now = "JingYing";
		else a[i].now = "BangZhong";
	}

	sort(a + 1, a + n + 1, cmp2);

	for (int i = 1; i <= n; i++) {
		cout << a[i].name << ' ' << a[i].now << ' ' << a[i].level << endl;
	}

	//system("pause");
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【洛谷】每日一题-P1786 帮贡排序 的相关文章

  • 用java -jar 命令执行架包时出现了Invalid or corrupt jarfile xxxx.jar

    将一个 java文件打包 jar后 xff0c 需要在META INF目录下的MANIFEST ME中添加Main Class选项 使用命令java jar xxxx jar后出现了Invalid or corrupt jarfile xx
  • 如何用Stata完成(shui)一篇经济学论文(三):基本命令

    目录 变量的生成 gen与egen区别 xff09 变量的删除变量的更改 在开始正式学习前 xff0c 有一个小建议 xff0c 希望大家养成在do file里写代码的习惯 xff0c 主要是方便保存已经写过的代码 xff0c 因为Stat
  • 阿里云服务器ECS入门题库

    Apsara Clouder云计算专项技能认证 xff1a 云服务器ECS入门题库 题库一多选题题库二多选题题库三多选题 保证及格 xff0c 不保证100分 xff01 xff01 xff01 保证及格 xff0c 不保证100分 xff
  • mysql 设置大小写不敏感

    一 原理与参数 mysql大小写敏感配置与两个参数相关 lower case file system 和 lower case table names 查看当前mysql的大小写敏感配置 show global variables like
  • mysql字符集查看与设置

    一 查看 MySQL 字符集 以下命令 Windows amp Linux通用 1 服务器和数据库 mysql gt show variables like 39 char 39 43 43 43 Variable name Value 4
  • WindTerm使用(暂停更新)

    作为一个经常和代码以及服务器打交道的人 xff0c 连接远程服务器所使用的工具肯定是越方便越好 目前 xff0c 我使用的是xshell5和MobaXterm两个 Xshell最新的是7 xff0c 破解版的我懒得去找 xff0c 那xsh
  • 彻底解决[未识别的网络][公共网络]的问题

    未识别的网络 导致网络变成 未知网络 或 公共网络 会造成一系列问题 比如防火墙的一些端口会挡在公共之外 等等 不细说 那么要如何把 未知网络 公用网络 怎么改变为 家庭 和 工作网络 网络的回答比如 百度问题上的回答都是无脑的回答 不可能
  • centos7安装Docker详细步骤(无坑版教程)

    一 安装前必读 在安装 Docker 之前 xff0c 先说一下配置 xff0c 我这里是Centos7 Linux 内核 xff1a 官方建议 3 10 以上 xff0c 3 8以上貌似也可 注意 xff1a 本文的命令使用的是 root
  • windows通过xrdp实现远程ubuntu

    首先声明 xff1a 我使用的是root用户 xff0c 所以无视权限问题 第一步 安装vncserver wget http www c nergy be downloads tigervncserver 1 6 80 4 amd64 z
  • 【Vue2+Vue3】开发指令使用总结,未完待续

    目录 一 watch监听及深度监听 二 directive自定义指令详解 43 实例 三 1 vue父子组件 xff1a 数据双向绑定 一 数据双向绑定 sync xff08 支持多个双向绑定值 xff09 三 2 父子组件间方法的调用 1
  • 南京大学数字电路与计算机组成实验的Verilator仿真(二)

    实验二 1 2 4译码器 top v module span class token function decode24 span span class token punctuation span x span class token p
  • firefox 的cookie 存放在哪里?

    在地址栏输入about surpport 打开配置页 找到about profiles 点击打开 看到有两个目录项 看准正在使用的那一个 34 正在使用此配置文件 34 找到cookie sqlite 的位置 正在使用的那个配置是删不掉的
  • C++ 构造函数和New运算符

    算法和数据结构就是编程的一个重要部分 xff0c 你若失掉了算法和数据结构 xff0c 你就把一切都失掉了 系统会自动在栈中为每个变量开辟内存空间 xff0c 以保证数值被合理地存放 由于栈是系统自动分配的 xff0c 因此速度较快 xff
  • matlab函数interp2及其c++代码

    最近将一个matlab程序转为c 途中遇到interp2这个家伙 我是左查右查 发现网上没有人总结这个玩意 于是我来初探一下 还是别有洞天的 嘿嘿 1 关于interp2 nbsp nbsp Vq interp2 X Y V Xq Yq l
  • CentOS 7中利用Snapper快照进行系统备份与恢复

    为什么要使用Snapper快照 xff1f 我们可以想像以下场景 xff1a 1 场景一 xff1a 系统发生意外宕机 xff0c 工程师无法快速定位问题 xff0c 业务受到中断 xff0c 客户十分不满意 2 场景二 xff1a 项目会
  • 计蒜之道 作弊揭发者(测试赛)

    鉴于我市拥堵的交通状况 xff0c 市政交管部门经过听证决定在道路两侧安置自动停车收费系统 当车辆驶入车位 xff0c 系统会通过配有的摄像头拍摄车辆画面 xff0c 通过识别车牌上的数字 字母序列识别车牌 xff0c 通过连接车管所车辆信
  • 7-10 兔子繁衍问题

    7 10 兔子繁衍问题 xff08 15 分 xff09 一对兔子 xff0c 从出生后第3个月起每个月都生一对兔子 小兔子长到第3个月后每个月又生一对兔子 假如兔子都不死 xff0c 请问第1个月出生的一对兔子 xff0c 至少需要繁衍到
  • Ubuntu运行tkinter程序的部署

    软件部署 xff08 Ubuntu系统 xff09 1 安装python环境 前提需要有网 ubuntu会自带python xff0c 不用单独安装 xff0c 但python的pip工具和tkinter包需要安装 xff08 1 xff0
  • Linux-用shell脚本写一个进度条

    shell执行脚本 xff1a 创建一个 sh文件 xff0c 编辑文件即可执行脚本 Shell脚本中用 表示注释 xff0c 相当于c语言的 注释 但如果 位于第一行开头 xff0c 并且是则例外 xff0c 它表示该脚本使用后面指定的解
  • S3C2440裸机按键控制小灯

    1 环境 1 操作系统 xff1a win7 64位 2 集成开发环境 xff1a keil4 7 3 开发板 xff1a FL2440 4 下载器 xff1a Jlink V9 2 按键以及LED灯原理图 根据FL2440开发板原理图可知

随机推荐

  • 数组存邻接表

    模板 xff1a 数组表示邻接表 int top 61 0 向 点中存第top个边 int head MAX N 61 1 每个点在建立邻接表时 xff0c 栈顶的边的编号 边的结构体 struct Edge int v 另一端连接的点 i
  • windows远程桌面到Ubuntu

    环境 xff1a VMware 43 Ubuntu18 04 方案 xff1a xrdp 43 gnome ubuntu xff08 不要安装xubuntu xff0c 费力不讨好 xff09 自己分步安装有时会遇到配置困难 xff0c 建
  • 系列一、NotePad++离线安装NppFTP插件

    一 下载离线插件 链接 xff1a https pan baidu com s 16EEGYOTKkMP bB8LcnwpsQ pwd 61 yyds 提取码 xff1a yyds 二 解压自己NotePad 43 43 对应版本 xff0
  • Ubuntu18 AMD和ARM版本的源的区别

    Ubuntu18 AMD和ARM版本的源的区别 文章目录 Ubuntu18 AMD和ARM版本的源的区别AMD版本ARM版本主要区别 之前因为懒没有仔细研究ubuntu AMD和ARM版本系统apt源的区别 xff0c 导致今天换源时候走了
  • 【C51】基于C51单片机的定时闹钟(含代码,电路,拿走即可用)

    基于C51单片机的定时闹钟 上电后设置定时时间 xff0c 按键1选择设置的是小时分钟还是秒钟 按键2对其进行具体的数字设置 一次选择完成之后就默认进入计时模式 达到计时时间后响铃 按键3可以关闭响铃 代码 span class token
  • 解决Centos7.9图形界面root用户登录报“sorry, that didn‘t work please try again”问题

    一 问题描述 xff1a 新装的Centos7 9 在图形界面以root身份进行登录时报 sorry that didn t work please try again xff0c 如下图所示 xff1a 经确认 xff0c root密码是
  • ubuntu 安装QT 5.0出现错误:Failed to load platform plugin "xcb".

    当你安装QT 5 0 时 xff0c 启动的时候会出现如下错误 xff1a Failed to load platform plugin 34 xcb 34 Available platforms are linuxfb minimal x
  • 获取Android设备的序列号(SN号)

    方法 xff08 一 xff09 通过反射获取sn号 public static String getDeviceSN String serial 61 null try Class lt gt c 61 Class forName 34
  • Python smtplib.SMTP()和smtplib.SMTP_SSL() 登录邮箱并发送邮件比较

    一 邮件发送流程 邮件的发送是主动行为 xff1a 主要通过 MUA 邮件客户端软件 xff0c 将邮件内容发送给对应的服务器 暂存到投递服务区 xff0c 然后由当前运营商根据邮件特征信息将邮件转发给目标服务器的投递服 务区 xff0c
  • mysql limit 使用规范

    在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql 已经为我们提供了上面这样一个功能 xff08 0 xff09 mysql不支持select
  • 【Proteus仿真】【STM32单片机】智能电饭煲系统设计

    文章目录 一 功能简介二 软件设计三 实验现象联系作者 一 功能简介 本项目使用Proteus8仿真STM32单片机控制器 xff0c 使用继电器加热 保温模块 数码管模块 按键模块 LED指示灯 蜂鸣器模块等 主要功能 xff1a 系统运
  • Kurento-6.7.1 媒体服务器搭建详细教程(Kurento-Media-Server)

    Kurento 6 7 1 媒体服务器搭建详细教程 关于 Kurento 媒体服务器 Kurento 架构的核心是媒体服务器 xff0c 它被命名为Kurento媒体服务器 xff0c 即 KMS Kurento 媒体服务器所有的媒体处理模
  • 什么是jsp?

    什么是JSP JSP全称Java Server Pages xff0c 是一种动态网页开发技术 它使用JSP标签在HTML网页中插入Java代码 标签通常以 lt 开头以 gt 结束 JSP是一种Java servlet xff0c 主要用
  • Echarts实现自定义图标——风向图

    上图用了两种模式表示风向图 xff0c 第一种是自定义系列 xff0c 第二种使用了折线图 xff0c 给折线图添加自定义图标 两者的区别在于给options series设置不同的type值 xff0c 如下图 xff1a 那么我们来一步
  • 最大公约数的四种方法

    最大公约数的四种方法 前言1 暴力穷举法2 辗转相除法步骤原理证明 xff1a 3 更相减损法步骤原理证明 xff1a 比较 4 stein算法比较原理步骤 前言 求两数的最大公约数 xff0c 一共有四种方法 xff1a 暴力穷举法 更相
  • Codeblocks配合gfortran作为fortran开发环境的配置方法

    xff08 以前在bmy bbs发过一次 xff09 这个方法试过在64位win7和32位winxp上可用 1 xff0c 首先安装codeblockes xff0c 必须选完全安装 xff08 Full All plugins xff09
  • Mysql jdbc URL连接参数useSSL、serverTimezone 相关问题

    MySQL 8 0 以下版本 JDBC 驱动名及数据库 URL span class token keyword static span span class token keyword final span span class toke
  • Week8 CSP-M2

    T1 HRZ的序列 题目 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个数KK xff0c 使得一些
  • 如何在linux环境下启动时打开numlock

    如何在linux环境下启动时打开numlock 技巧管理员 2000 12 24 10 23 返回 转发 想在系统启动时自动打开NumLock xff0c 可以在 etc rc d rc local中加入以下内容 xff1a for t i
  • 【洛谷】每日一题-P1786 帮贡排序

    原题链接 P1786 帮贡排序 解析 实现方法 一看题 xff1a 这不就是道排序吗 xff1f 但是 用啥办法呢 xff1f 这自带的排序方法 xff0c 肯定是不能用了 那么我们就来写一个cmp排序函数吧 xff01 但是 输出排序呢