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

[12月考试] F

[12月考试] F

题目描述

nnn 个人围成一个环,从第 111 个人开始进行共 n−1n-1n1 次报数。

iii 次报数开始的人报 111,接着右边的人依次报 2,3,…2,3,\ldots2,3,,报到 aia_iai 结束,报到 aia_iai 的人退出这个环,从这个人右边第一个人开始第 i+1i+1i+1 轮报数。

n−1n-1n1 轮报数结束后剩下的人的编号。

对于所有数据,n≤1000n\leq 1000n10001≤ai≤1091\leq a_i\leq 10^91ai109

输入格式

输入共 222 行。

111 行输入 111 个正整数 nnn

222 行输入 n−1n-1n1 个正整数 a1,a2,…,an−1a_1,a_2,\ldots,a_{n-1}a1,a2,,an1

输出格式

输出共 111111 个数,表示答案。

样例 #1

样例输入 #1

7
3 4 2 3 1 2

样例输出 #1

4

提示

样例解释 1

退出的顺序为:3,7,2,6,1,53,7,2,6,1,53,7,2,6,1,5

数据范围

对于 30%30\%30% 的数据,n,ai≤5n,a_i\leq 5n,ai5

对于 60%60\%60% 的数据,n,ai≤20n,a_i\leq 20n,ai20

对于 80%80\%80% 的数据,n,ai≤100n,a_i\leq 100n,ai100

对于所有数据,n≤1000n\leq 1000n10001≤ai≤1091\leq a_i\leq 10^91ai109

🧠 问题理解

有 nnn 个人围成一个环,每轮报数从某个人开始,报数到第 aia_iai 个数字的那个人出局,下一轮报数从被淘汰者右边的第一个人开始。共进行 n−1n-1n−1 轮,最后剩下一个人,求该人的编号。


✅ 解题思路

  1. 模拟环状队列: 用一个数组或链表维护剩余的人的编号。
  2. 当前起始位置索引: 记录每轮报数开始的位置。
  3. 报数位置计算:
    报数到第 aia_iai​ 个,实际上是从当前起始位置往右数 (ai−1)mod  当前人数(a_i - 1) \mod \text{当前人数}(ai​−1)mod当前人数 步。
  4. 删除该人: 将该人从队列中移除。
  5. 更新起始位置:
    下一轮从被淘汰者右边的第一个人开始,更新起始位置索引。
  6. 重复进行 n−1n-1n−1 轮后,队列中只剩一个人,即答案。

🚀 C++实现

#include <iostream>
using namespace std;const int MAXN = 1000;
int people[MAXN];int main() {int n;cin >> n;int a[MAXN];for (int i = 0; i < n - 1; ++i) {cin >> a[i];}// 初始化编号数组,0-based 方便处理for (int i = 0; i < n; ++i) {people[i] = i + 1;  // 1-based 编号}int size = n;int start = 0; // 起始报数位置for (int i = 0; i < n - 1; ++i) {// 报数位置 = (start + a[i] - 1) % 当前人数int pos = (start + a[i] - 1) % size;// 淘汰people[pos]// 删除元素:后面的往前移动覆盖for (int j = pos; j < size - 1; ++j) {people[j] = people[j + 1];}size--;// 下一轮报数从淘汰者右边的人开始,实际上是当前位置不变(因为淘汰者后面元素已左移覆盖)start = pos % size;}// 剩下最后一个人cout << people[0] << endl;return 0;
}
http://www.dtcms.com/a/308495.html

相关文章:

  • 用el-table实现的可编辑的动态表格组件
  • 微信小程序中进行参数传递的方法
  • 【Linux】的起源 and 3秒学习11个基本指令
  • JSX语法
  • 关于AI的使用感想
  • Maven模块化开发与设计笔记
  • 深入解析 Spring AI 系列:剖析OpenAI接口接入组件
  • WEditor:高效的移动端UI自动化脚本可视化编辑器
  • Vibe Coding:AI驱动开发的安全暗礁与防护体系
  • MySql 知识大汇总
  • 架构实战——架构重构内功心法第三式(运筹帷幄)
  • 行业热点丨仿真历史数据难以使用?如何利用几何深度学习破局,加速汽车工程创新
  • Ubuntu 18.04 repo sync报错:line 0: Bad configuration option: setenv
  • 三维火灾调查重建:科技赋能,探寻真相
  • 网络安全-同形异义字攻击:眼见并非为实(附案例详解)
  • 什么是 MySQL 的慢查询日志?如何优化慢查询?
  • FastAPI docs接口文档打不开怎么解决
  • 活到老学到老之AES加密
  • CentOS 7 上使用 Docker 安装 Jenkins 完整教程
  • 有公网ip还要端口映射不?只有内网ip怎么做映射端口到外网访问?
  • Electron 作品【AI聊天】桌面应用 —— 系列教程(含开源地址)
  • 守护金融核心业务 | 博睿数据《金融业务全景与全链路智能可观测体系建设白皮书》发布!
  • ORACLE基本DML操作
  • ShimetaPi M4-R1:国产高性能嵌入式平台的异构计算架构与OpenHarmony生态实践
  • 如何在 Ubuntu 24.04 或 22.04 LTS 上安装 OpenShot 视频编辑器
  • 【支持Ubuntu22】Ambari3.0.0+Bigtop3.2.0——Step6—本地apt源
  • MELF电阻的原理,特性和应用
  • 视觉图像处理中级篇 [2]—— 外观检查 / 伤痕模式的原理与优化设置方法
  • 从入门到精通:Git全面指南(下)
  • 【01】大恒相机SDK C++开发 —— 初始化相机,采集第一帧图像、回调采集、关闭相机