洛谷 P1786 帮贡排序

2023-05-16


目录

输入

授予职位

输出前按输出规则排序

输出

最后代码


题目是非常长长长长长长长长长长长长长长长长长长长长长长长长长长长长长(我花了2个小时才做完)

这题是大模拟(打磨你),题目也很长,需要耐心读题


1.所有信息输入后排序,排序方式如下:

(1)先按帮贡排序;

(2)如帮贡一样,则按输入顺序排列。

2.再重新编好职位后排输出顺序,也就是职位内的排名,排序方式如下:

(1)先按现在的职位排序;

(2)如职位相同,再按等级排序;

(3)如果恰好等级还破天荒地一样,则按输入顺序排列。

如果看到这你的疑惑已经解开了,那就点完赞继续写你的代码吧!还不会写的小伙伴们跟我来!


输入

//主函数外
const int N = 120;
struct node {
	string name, zw;//名字 职位
	int bg, level, xh;//帮贡 等级 序号
} a[N];

//主函数内
int n;
cin >> n;
for (int i = 1; i <= n; i ++) {
	cin >> a[i].name >> a[i].zw >> a[i].bg >> a[i].level;
	a[i].xh = i;
}

授予职位

//主函数外
bool cmp1(node x, node y) {
	//帮贡 -> 原顺序
	if (x.bg == y.bg)
		return x.xh < y.xh;
	else
		return x.bg > y.bg;
}


//主函数内

//排序 帮主和副帮主不动
sort(a + 4, a + n + 1, cmp1);

//授予职位
for (int i = 1; i <= n; i ++) {
	if (i == 1)
		a[i].zw = "BangZhu";
	else if (i <= 3)
		a[i].zw = "FuBangZhu";
	else if (i <= 5)
		a[i].zw = "HuFa";
    else if (i <= 9)
		a[i].zw = "ZhangLao";
	else if (i <= 16)
		a[i].zw = "TangZhu";
	else if (i <= 41)
		a[i].zw = "JingYing";
	else
		a[i].zw = "BangZhong";
}

输出前按输出规则排序

//主函数外
int sort_zw(string x) {
	if (x == "BangZhu")
		return 6;
	if (x == "FuBangZhu")
		return 5;
	if (x == "HuFa")
		return 4;
	if (x == "ZhangLao")
		return 3;
	if (x == "TangZhu")
		return 2;
	if (x == "JingYing")
		return 1;
	if (x == "BangZhong")
		return 0;
}
bool cmp2(node x, node y) {
	//职位 -> 等级 -> 原顺序
	if (sort_zw(x.zw) == sort_zw(y.zw)) {
		if (x.level == y.level)
			return x.xh < y.xh;
		else
			return x.level > y.level;
	} else {
		return sort_zw(x.zw) > sort_zw(y.zw);
	}
}

//主函数内

//新花名册排序
sort(a + 1, a + n + 1, cmp2);

输出

//输出新花名册
for (int i = 1; i <= n; i ++)
	cout << a[i].name << ' ' << a[i].zw << ' ' << a[i].level << '\n';

最后代码

#include <iostream>
#include <algorithm>
#include <map>

using namespace std;

const int N = 120;
struct node {
	string name, zw;//名字 职位
	int bg, level, xh;//帮贡 等级 序号
} a[N];
int n;

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

bool cmp1(node x, node y) {
	//帮贡 -> 原顺序
	if (x.bg == y.bg)
		return x.xh < y.xh;
	else
		return x.bg > y.bg;
}

bool cmp2(node x, node y) {
	//职位 -> 等级 -> 原顺序
	if (sort_zw(x.zw) == sort_zw(y.zw)) {
		if (x.level == y.level)
			return x.xh < y.xh;
		else
			return x.level > y.level;
	} else {
		return sort_zw(x.zw) > sort_zw(y.zw);
	}
}


int main() {
	//输入
	cin >> n;
	for (int i = 1; i <= n; i ++) {
		cin >> a[i].name >> a[i].zw >> a[i].bg >> a[i].level;
		a[i].xh = i;
	}

	//排序 帮主和副帮主不动
	sort(a + 4, a + n + 1, cmp1);

	//授予职位
	for (int i = 1; i <= n; i ++) {
		if (i == 1)
			a[i].zw = "BangZhu";
		else if (i <= 3)
			a[i].zw = "FuBangZhu";
		else if (i <= 5)
			a[i].zw = "HuFa";
		else if (i <= 9)
			a[i].zw = "ZhangLao";
		else if (i <= 16)
			a[i].zw = "TangZhu";
		else if (i <= 41)
			a[i].zw = "JingYing";
		else
			a[i].zw = "BangZhong";
	}

	//新花名册排序
	sort(a + 1, a + n + 1, cmp2);
	//输出新花名册
	for (int i = 1; i <= n; i ++)
		cout << a[i].name << ' ' << a[i].zw << ' ' << a[i].level << '\n';

	return 0;
}

AC证明 戳我鸭


原题链接

我绝对是一个蒟蒻,但你看得这么认真,点个赞加个油吧!

创作不易,禁止转载

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

洛谷 P1786 帮贡排序 的相关文章

  • SpringBoot整合mybatis-plus实现分页查询(建议收藏)

    一 前言 最近学习了SpringBoot分页查询的两种写法 xff0c 一种是手动实现 xff0c 另一种是使用框架实现 现在我将具体的实现流程分享一下 二 手动实现分页查询 先复习一下 xff0c SQL中的limit关键字 xff0c
  • MySQL 数据库 分组查询

    分组查询 xff1a 包括单列分组查询和多列分组查询 group by 单列分组查询 示例 xff1a 1 根据科目分组 xff0c 查询每个科目的平均分 2 根据班级分组 xff0c 查询每个班级成绩总数 3 根据班级分组 xff0c 查
  • JAVA http请求工具类

    原文 xff1a JAVA http请求工具类 月半花开的博客 CSDN博客 目录 1 第一种http requst 1 xff09 maven引入 2 xff09 Get请求请求示例 3 xff09 post请求请求示例 2 第二种hut
  • Weather API 天气应用 API调用分享

    Weather API 分享 链接 xff1a https openweathermap org api 注册默认是One Call API 3 0 适合学生项目练手 提供以下天气数据 xff1a 当前天气每小时 分钟预报48小时每小时预报
  • pip安装python包到指定路径

    1 2 我们可以先进入创建好的虚拟环境的site packages 我还没有尝试 xff1a
  • Kubernetes1.26.0部署(Ubuntu/CentOS)

    文章目录 前言准备工作准备5台虚拟机初始化操作Centos配置yum源配置免密 修改hostname 关闭防火墙 selinux 关闭swap分区 方便后面进行其它操作 下载软件包并批量安装配置时间同步配置打开文件描述符添加ipvs模块和内
  • 真正免费的天气API,无需注册申请key

    文章目录 1 中华万年历的天气API 2 讯飞语音识别内置的墨迹天气API 3 乐享天气APP 4 蚂蚁数据天气查询API接口 无聊整理的真正免费的天气API xff0c 无需注册申请key等 xff0c 当然部分数据解析需要自己理解下 x
  • rollup 打包报错

    RollupError Node tried to load your configuration file as CommonJS even though it is likely an ES module To resolve this
  • 视频4K技术的解读

    前几年4K技术就已经有人提及 xff0c 今年更是成了一个非常热门的词汇 xff0c 而且4K技术已经普遍应用于各类终端 xff0c 如电视机 机顶盒 手机等 那么如何来理解4K这个东东呢 xff1f 今天博主就谈谈自己对4K技术的认识 博
  • 字符串—练习题

    目录 案例 xff1a 拼接字符串 案例 xff1a 拼接字符串 案例 xff1a 统计字符串 案例 xff1a 字符串反转 案例 xff1a 字符串反转 案例 xff1a 拼接字符串 需求 xff1a 定义一个方法 xff0c 把int数
  • Anaconda配置环境变量 Windows11

    1 找到Anaconda的安装路径以备配置环境变量使用 2 复制一下路径 C ProgramData Anaconda3 C ProgramData Anaconda3 Scripts C ProgramData Anaconda3 Lib
  • 用rs_lidar雷达跑lio_sam

    1 准备工作 imu绑定串口有线连接雷达并能用rviz显示雷达点云用两个imu标定包标定imu在完成第二步必要的工作后 xff0c 配置LIO SAM config 下的params yaml参数 xff0c 更改之前建议备份在旁边复制粘贴
  • 如何从gitee上下载项目并运行

    前端界面 找到所要下载的项目 xff0c 点击克隆 下载 xff0c 并下载zip压缩包后解压 xff08 方法很多看个人习惯 xff0c 我觉得这样比较快 xff09 打开WebStrom xff0c 并找到刚刚下载的项目 xff0c 点
  • Springboot整合Mybatis-Plus

    1 概述 MyBatis Plus opens new window xff08 简称 MP xff09 是一个 MyBatis opens new window 的增强工具 xff0c 在 MyBatis 的基础上只做增强不做改变 xff
  • 初识C语言——第一个C语言程序(保姆级教程)

    1 创建一个项目 1 1 首先 xff0c 下载好适合的编译器 xff0c 此处用的是VS2017 此处点击空项目 此处有几个细节需要我们注意一下 xff1a 1 此处选择C 43 43 xff0c 空项目 xff0c C 43 43 对C
  • Ubuntu双系统扩大/home磁盘空间大小,gparted移动磁盘位置及大小

    前言 xff1a 笔者之前试过挂载磁盘的方法 xff0c 后开觉得不方便 xff0c 于是决定用U盘启动盘来扩大空间 xff0c 花了几个小时终于搞清楚了整个流程 xff0c 其中在gparted移动磁盘位置的地方卡了很长时间 xff0c
  • gitee码云仓库创建教程

    git码云 目录 1 注册账户 2 申请生成公钥 3 生成公钥 3 创建git仓库 4 remote Access denied 拒绝访问 fatal unable to access https gitee cohe requested
  • 如何使用Python的第三方库you-get下载视频

    安装步骤 1 Win 43 R打开cmd 2 输入指令下载第三方库you get xff0c 该第三方库可以用于下载视频 pip install you get 3 等到它显示 Successfully installed you get
  • 递归函数-求N阶乘

    递归函数 xff0c 就是指自己调用自己的函数 运用大事化小的思维 xff0c 将繁杂的流程简单化 想对比于循环思维 xff0c 递归函数显然让代码的利用率更高了 xff0c 因为0的阶乘是0 xff0c 所以这应该单独进行判断 xff0c
  • CDN如何添加加速域名和绑定CNAME

    摘要 xff1a 本文将手把手教你开通CDN服务 添加加速域名和绑定CNAME 步骤 1 xff1a 开通CDN服务 在阿里云官网CDN产品详情页快速了解产品 xff0c 之后单击 立即开通 在订购页面选择适合计费方式 xff0c 确认订单

随机推荐