当前位置: 首页 > java >正文

题解:P11185 奖牌排序

思路

每个小朋友可以选择按照金牌数从大到小排序,也可以选择按照银牌数从大到小排序,也可以选择按照铜牌数从大到小排序。

于是不难想到这是一个简单的贪心问题,每个小朋友可以选择他自己认为最优的排序方法

我们假设一个小朋友金牌、银牌、铜牌的排名是 5 , 1 , 4 5,1,4 5,1,4,那么他的最优排名就是 1 1 1

在小朋友自制的排行榜里,如果自己和别的小朋友并列,那么他可以把自己写在最前面。

通过这一点我们不难想到可以通过二分查找找到第一个奖牌数量等于这位小朋友奖牌数的位置,就是这位小朋友的排名。

然后模拟一下样例:

小朋友金牌排名银牌排名铜牌排名最好排名
11141
22111
32322
44333

相信你已经会做了,不会也没关系,我们来看下程序步骤。

程序步骤如下:

  1. 输入数据;
  2. 排序(注意:建议从大到小,当然你也可以从小到大);
  3. 排序后,从前往后计算所有小朋友的排名(取最优排名);
  4. 输出结果。

注意点:

  • 我们如果在 sort() 中使用了 greater <int> () 的话,在 lower_bound() 中也必须使用 greater <int> ()
  • 不需要记录小朋友的编号,直接分开存即可。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, a[200010], b[200010], c[200010];
struct node {int au, ag, cu; // 结构体存每个小朋友的金、银、铜牌数量
} input[200010];
signed main() {ios :: sync_with_stdio(false);cin . tie(nullptr);cin >> n;for (int i = 1; i <= n; i ++) {cin >> input[i] . au >> input[i] . ag >> input[i] . cu; // 输入a[i] = input[i] . au; // a数组用来保存小朋友们的金牌数量b[i] = input[i] . ag; // b数组用来保存小朋友们的银牌数量c[i] = input[i] . cu; // c数组用来保存小朋友们的铜牌数量}sort(a + 1, a + n + 1, greater <int> ()), sort(b + 1, b + n + 1, greater <int> ()), sort(c + 1, c + n + 1, greater <int> ()); // 将每种奖牌数量单独排序,因为他们互不干扰for (int i = 1; i <= n; i ++) {int minn = INT_MAX;minn = min(minn, (int)(lower_bound(a + 1, a + n + 1, input[i] . au, greater <int> ()) - a));minn = min(minn, (int)(lower_bound(b + 1, b + n + 1, input[i] . ag, greater <int> ()) - b));minn = min(minn, (int)(lower_bound(c + 1, c + n + 1, input[i] . cu, greater <int> ()) - c));// 取小朋友最优的排名(使用 lower_bound)cout << minn << endl;}return 0;
}

最后希望大家可以关注与点赞,感谢支持。

http://www.xdnf.cn/news/1295.html

相关文章:

  • 麒麟V10安装MySQL8.4
  • 如何应对政策变化导致的项目风险
  • windows server2019 内网离线安装mysql5.7方式;windows server2019安装软件提示丢失msvcp100.dll问题处理
  • Java集成Zxing和OpenCV实现二维码生成与识别工具类
  • zRenamer:一款刚新鲜出炉的免费文件更改工具
  • MySQL基本查询与数据操作全面解析
  • ​​批发商商城小程序制作哪家强?开启高效批发新模式!
  • 大白话说MCP(Model Context Protocol)
  • Verilog 4:数组
  • pod 创建私有库指南
  • JavaScript 数组常用方法解析
  • 塔能风机节能方案:为工厂能耗精准“减负”
  • 《念无双》:仙侠世界中的传统文化交响
  • AT24C02芯片简介:小巧强大的串行EEPROM存储器
  • 力扣刷题Day 26:回文链表(234)
  • 配置spark
  • Gartner发布2025年全球IT支出最新预测:人工智能持续推动信息安全需求增加
  • 尾递归优化与函数柯里化
  • TCP三次握手与四次挥手面试回答版本
  • 自然语言处理 | 语言模型(LM) 浅析
  • spark-sql
  • 2023蓝帽杯初赛内存取证-5
  • springBoot_项目目录结构
  • 刀客doc:快手磁力引擎副总裁冯超离职,王志强接管渠道业务
  • 仅追加KV数据库
  • C# 跨进程 临界区 互斥 进程锁
  • 航电系统之自动控制系统篇
  • 词语关系图谱模型
  • Python中__init__方法的深度解析:构造对象的艺术
  • Milvus(3):数据库、Collections说明