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

题解: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;
}

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

相关文章:

  • linux下内存地址数学运算
  • HTTP状态码有哪些常见的类型?
  • 搭建 Spark - Local 模式:开启数据处理之旅
  • 推荐一个简单又好用的在线视频编辑工具,在线免费使用,便捷高效!
  • ​​批发商商城小程序制作哪家强?开启高效批发新模式!
  • Python爬虫从入门到实战详细版教程Char01:爬虫基础与核心技术
  • 在 master 分支上进行了 commit 但还没有 push,怎么安全地切到新分支并保留这些更改
  • STL常用算法——C++
  • Unity 跳转资源商店,并打开特定应用
  • C# 事件知识文档
  • Vue2 el-checkbox 虚拟滚动解决多选框全选卡顿问题 - 高性能处理大数据量选项列表
  • 如何给文件增加拓展名
  • 1️⃣5️⃣three.js_GUI辅助调试器
  • Qt进阶开发:鼠标及键盘事件
  • AOSP Android14 Launcher3——RectFSpringAnim窗口动画类详解
  • ComfyUI+Sonic实战,三步实现图片开口说话
  • 单个或批量实现-提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件。
  • 【文献分享】Model-based evaluation提供了数据和代码
  • day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)
  • rk3568main.cc解析
  • 裁员15%、撤销132个机构,美国务院将全面重组
  • 新华社经济随笔:机器人“摔倒、爬起”的背后
  • 国开行原副行长李吉平一审获刑14年
  • 浙江桐乡征集涉企行政执法问题线索,含乱收费、乱罚款、乱检查等
  • “小时光:地铁里的阅读”摄影展开幕,嘉宾共话日常生活与阅读
  • A股低开高走,震荡收涨:两市成交10414亿元,4360股收涨