[LeetCode][LCR187]破冰游戏——约瑟夫环

题目

LCR 187. 破冰游戏

社团共有 num 位成员参与破冰游戏,编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target,从 0 号成员起开始计数,排在第 target 位的成员离开圆桌,且成员离开后从下一个成员开始计数。请返回游戏结束时最后一位成员的编号。

  • 示例 1:

输入:num = 7, target = 4
输出:1

  • 示例 2:

输入:num = 12, target = 5
输出:0

  • 提示:
    1 <= num <= 10^5
    1 <= target <= 10^6

思考

  1. 就本题这个数量级,直接模拟肯定会超时,必有某种数学方式进行求解
  2. 其实本题是著名的 ”约瑟夫环“ 问题,描述如下:
  • 约瑟夫环(Josephus problem)最初的版本可以追溯到古代历史。这个问题据说最早出现在犹太历史学家弗拉维约斯·约瑟夫斯(Flavius Josephus)的著作《犹太古史》中。在这个传奇式的故事中,约瑟夫斯和他的40个士兵被罗马军队包围。他们决定宁可自杀也不被俘虏,于是他们决定围成一个圈,按照一定的规则自杀,以避免被捕。

  • 问题的描述是:约瑟夫斯和他的士兵为了避免被俘,决定站在一个圆圈内,并且每次从一个人开始,依次数到第k个人,然后将被淘汰的人移出圆圈。那么最终存活下来的人是哪一个呢?

  • 这个问题在数学和计算机科学领域中有很多变种和应用。常见的形式包括不同的起始位置和不同的淘汰间隔等。

解法

  1. 首先设一共有 num 个人,每轮去掉一个人,最终剩下一个人,也就是进行了 num-1 轮
  2. 游戏的关键不是每个人的编号,而是最终留下来的那个人在环中的位置
  3. 可以一次次进行游戏去掉一个个人,如果反过来,也可以恢复去掉的人,从一个人恢复到 num 个人
  4. 在只有一个人的情况下,解就是 0 号位置,也就是如果要把剩下的一个人也去掉,必然是去掉 0 号位置的人
  5. 那么怎么从一个人恢复到 num 个人呢?我们需要得到每次被去掉的数的位置:
1人->2人
num-1 轮去掉的数的位置 =(0号位置 + 每次跳跃数 target)% 加入新的数后本轮剩下的人数
num-1 轮去掉的数的位置=(0+target)%2

2人->3人
num-2 轮去掉的数的位置 =(num-1 轮去掉的数的位置 + 每次跳跃数 target)% 加入新的数后本轮剩下的人数
num-2 轮去掉的数的位置=(num-1 轮去掉的数的位置+target)%3

class Solution {
public:
    int iceBreakingGame(int num, int target) {
        // 每一次去除的人的位置 x
        // 在剩下一个人的情况下,
        // 这个位置是幸存者,
        // 也是下一轮剩0人的时候要去除的位置
        int x=0;
        for(int i=2; i<=num; ++i){
            x = (x+target)%i;
        }
        return x;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/497794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

戴尔电脑Dell SupportAssist占用内存高,卸载Dell SupportAssist

咨询戴尔客服了解到&#xff0c;SupportAssist是机器出厂自带的一款应用&#xff0c;主要的功能是可以检查驱动更新以及做一些硬件方面的健康检测&#xff0c;有时候后台运行可能会导致进程占用内存比较大&#xff0c;导致访问被的应用崩溃。 咨询卸载不影响之后&#xff0c;然…

前端学习-CSS基础-Day3

一、CSS三大特性 1.1层叠性 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则&#xff1a; 1.样式冲突&#xff0c;遵循的原则是就近原则&#xff0c;哪个样式离结构近&a…

【MagicDrive环境配置】新手配俩星期版

1.创建一个新的环境conda create -n newdrive python3.8 2.激活该环境conda activate newdrive 3.下载MagicDrive源码 git clone --recursive https://github.com/cure-lab/MagicDrive.git&#xff0c;如果出现时间超时八成是网的问题&#xff0c;直接自己下载解压就好 3.我的…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率&#xff08; A c c u r a c y Accuracy Accuracy&#xff09; 二分类查准率 P r e c i s i o n Precision Precision&#xff0c;查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…

AI新工具 又一个开源大模型DBRX击败GPT3.5;根据音频和图像输入生成会说话、唱歌的动态视频

✨ 1: AniPortrait 腾讯开源&#xff1a;根据音频和图像输入生成会说话、唱歌的动态视频 AniPortrait 是个先进的框架&#xff0c;专门用来生成高质量的、由音频和参考肖像图片驱动的动画。如果你有视频&#xff0c;也可以用来实现面部的再现&#xff08;Face reenactment&am…

京东云搭建幻兽帕鲁Palworld多人游戏联机服务器教程,1分钟开服

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

Jmeter调用测试片段 —— 模块控制器

可以使用模块控制器调用测试片段。模块控制器提供了一种在运行时将测试片段替换为当前测试计划的机制。测试片段可以位于任何线程组中。 1、打开一个Jmeter窗口&#xff0c;添加好线程组、用户定义变量、模块控制器、测试片段、察看结果树。 2、用户定义变量同样定义好访问ip及…

【二十七】【算法分析与设计】归并(1),912. 排序数组,归并排序,递归函数的时间复杂度计算,LCR 170. 交易逆序对的总数

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < …

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…

镜视界 | DevSecOps CI/CD 管道中数字供应链安全的集成策略

目录 前言 数字供应链&#xff08;DSC&#xff09;的定义 数字供应链安全的重点内容和风险因素 CI/CD管道的安全目标和可信实体 将数字供应链安全集成到CI/CD管道中 结语 本文字数&#xff1a;7715&#xff0c;阅读时长&#xff1a;19分钟 1.前言 在敏捷开发的模式下&…

Idea2023.3.6版本无法启动设置界面-settings界面打不开无反应---IntelliJ Idea工作笔记013

先说一下网上有,把某个文件删除的 有说是因为汉化问题的 可以看到,其实都不是,这样弄就好了,很简单 Please report thisjava.lang.ClassCastException: class [Lcom.intellij.execution.filters.CompositeInputFilter$InputFilterWrapper; cannot be cast to class java.uti…

AcWing-动态求连续区间和

1264. 动态求连续区间和 - AcWing题库 所需知识&#xff1a;树状数组 树状数组的表现形式&#xff1a;&#xff08;不会画图从别的大佬那里摸过来的&#xff09; 树状数组为分组管理&#xff0c;点与点之间有联系&#xff0c;并非像普通数组一样每个点之间相互独立 树状数组…

Swagger添加JWT验证(ASP.NET)

文章目录 JWT1、解析2、配置JWT JWT 1、解析 1&#xff09;客户端向授权服务系统发起请求&#xff0c;申请获取“令牌”。 2&#xff09;授权服务根据用户身份&#xff0c;生成一张专属“令牌”&#xff0c;并将该“令牌”以JWT规范返回给客户端 3&#xff09;客户端将获取到的…

怎样去保证 Redis 缓存与数据库双写一致性?

解决方案 那么我们这里列出来所有策略&#xff0c;并且讨论他们优劣性。 先更新数据库&#xff0c;后更新缓存先更新数据库&#xff0c;后删除缓存先更新缓存&#xff0c;后更新数据库先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后更新缓存 这种方法是不推…

Aino AI,一个空间数据查询和分析的应用

简介 chatgpt的出现掀起了一大波行业革命&#xff0c;或许也包括我们地信行业。分享一下Aino AI&#xff0c;一个基于AI的GIS应用。 Aino公司在今年推出了 Aino AI 助手&#xff0c;它可以通过自然语言的方式自动化处理空间数据&#xff0c;通过和OpenStreetMap的结合实现无缝…

星光/宝骏/缤果/长安 车机CarPlay手机操作破解教程V2.0版本(无需笔记本、无需笔记本、无需笔记本)

之前写了个1.0版本&#xff0c;由于太局限&#xff0c;需要用到笔记本才能操作&#xff0c;很多车友反馈不方便。特此出个手机版教程&#xff0c;简单easy&#xff0c;妈妈再也不用担心我搞不定啦 一、准备工作 先卸载车机上的autokit 或者 智能互联 app&#xff0c;这步很关…

深度学习每周学习总结P3(天气识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据链接 提取码&#xff1a;o3ix 目录 0. 总结1. 数据导入部分数据导入部分代码详解&#xff1a;a. 数据读取部分a.1 提问&#xff1a;关…

华为云2024年优惠券领取入口及使用攻略

华为云作为国内领先的云服务提供商&#xff0c;一直致力于为用户提供高效、安全、可靠的云服务体验。为回馈广大用户的支持&#xff0c;华为云定期推出各种优惠活动&#xff0c;其中就包括备受用户喜爱的优惠券。本文将为大家整理2024年华为云优惠券的领取入口及使用攻略&#…

windows10搭建reactnative,运行android全过程

环境描述 win10,react-native-cli是0.73&#xff0c;nodeJS是20&#xff0c;jdk17。这都是完全根据官网文档配置的。react-native环境搭建windows。当然官网文档会更新&#xff0c;得完全按照配置来安装&#xff0c;避免遇到环境不兼容情况。 安装nodeJS并配置 这里文档有详…

flutter 修改app名字和图标

一、修改名字 在Android中修改应用程序名称&#xff1a; 在AndroidManifest.xml文件中修改应用程序名称&#xff1a; 打开Flutter项目中的android/app/src/main/AndroidManifest.xml文件。找到<application>标签&#xff0c;然后在android:label属性中修改应用程序的名称…