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

题解 洛谷 Luogu P4715 【深基16.例1】淘汰赛 C++

题目

传送门

P4715 【深基16.例1】淘汰赛 - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P4715https://www.luogu.com.cn/problem/P4715https://www.luogu.com.cn/problem/P4715https://www.luogu.com.cn/problem/P4715

思路

2^7 也就 128 个数据,直接暴力模拟决出胜者的过程就行了

每轮操作,数组中的元数数量减半,仅保留特定下标组中能力值较大的那个

特定下标组,就是题目所说的某场比赛中参赛二国对应的下标

如剩 8 个参赛国时,有 (0, 1), (2, 3), (4, 5), (6, 7) 四个下标组,分别存入 0, 1, 2, 3

只剩两个参赛国时,输出能力值较小者的编号

因为能力值和编号绑定,我们存的时候把它们两个存一起,用 pair<int, int> 就行了

pair 对象之间默认的大小比较 (本题体现在 max(a, b) 和最后的比较语句)

first 的优先级高于 second,只有两对象 first 相等时才会比较 second

题目说了不同参赛国能力值不同

这样的存储方式下,pair 对象之间默认的大小比较与我们的模拟目标相符

代码

#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
typedef pair<int, int> PII;
const int N = 1030;
int n, POW, ans;
PII arr[N];
int main()
{
    cin >> n;
    POW = pow(2, n); //pow(2, n) 提前计算,避免放在循环条件中带来的额外计算开销 (循环条件每次循环体执行完都会执行)
    for (int i = 0; i < POW; i++)
        cin >> arr[i].first, arr[i].second = i + 1; //second 存编号
    while ((POW /= 2) >= 2) //POW 表示该轮要保留的参赛国的数量,每轮 / 2,最后一轮要保留 2 个参赛国
        for (int i = 0; i < POW; i++)
            arr[i] = max(arr[i * 2], arr[i * 2 + 1]); //模拟决出胜者的过程。(i * 2, i * 2 + 1) 是一个特定下标组,存入 i
    cout << (arr[0] < arr[1] ? arr[0].second : arr[1].second); //输出最后 2 个参赛国中能力值较小的参赛国的编号
    return 0;
}

http://www.kler.cn/a/518177.html

相关文章:

  • Oracle迁移DM数据库
  • scratch学习教程
  • 一个简单的自适应html5导航模板
  • 读书笔记:《华为突围ERP封锁全纪实》
  • 【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报
  • 如何解压7z文件?8种方法(Win/Mac/手机/网页端)
  • 技术 · 创作 · 生活 | 我的 2024 全面复盘
  • 深圳大学-智能网络与计算-实验二:STM32编程实验
  • 【PyCharm】将包含多个参数的 shell 脚本配置到执行文件来调试 Python 程序
  • Linux多路转接之epoll(补充)
  • 网络系统管理Linux环境——智慧运维平台部署(乐维LW)
  • 学习第七十五行
  • Command Center AI
  • BME280一款测量温度、湿度和气压的环境传感器
  • 【Nomoto 船舶模型】
  • 基于Arduino的厨房安全检测系统:守护家庭的智能助手
  • StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级
  • MiniMax 稀宇科技
  • Go的内存逃逸
  • Redis数据库笔记——数据结构类型
  • Android程序中使用FFmpeg库
  • 大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件
  • 【论文+源码】Difformer在文本生成嵌入空间上增强扩散模型
  • RV1126画面质量一:视频基础
  • 【Linux系统】—— 动静态库
  • ORB-SLAM2源码学习:Initializer.cc(13): Initializer::ReconstructF用F矩阵恢复R,t及三维点