【洛谷】P1145-约瑟夫

题目链接

P1145 约瑟夫-洛谷

解析

与最经典的约瑟夫问题略有不同,这题要求刚好使队伍后一半人全部出列。

注:队伍序号从0开始!

这里我采用的是求出出队的人在当前队伍中序号的方法

做法为用号数m对当前总人数sum取模再减一,获得本次报数起点需要向右移动的距离(dis,当距离为-1时向左移动)

dis = m%sum - 1;

上次出列序号out+需要移动的距离dis,对sum取模,可以获得下次出列的序号,只要保证该序号大于等于k即是坏人出列

out = (out + dis + sum) % sum;
//括号内再加一个sum是为了对移动距离为-1时取模

当sum削减到k时说明坏人已全部出列。

代码

#include<iostream>
using namespace std;
int k, m;
int main()
{int ans = 0;cin >> k;for (m = k + 1;ans == 0;m++){int out = 0, sum = 2 * k, dis;while (sum > k){dis = m % sum - 1;out = (out + dis + sum) % sum;if (out >= k && out < 2 * k)sum--;elsebreak;if (sum == k)ans = m;}}cout << ans;return 0;
}

优化

m可以不用逐级递增,而是使m满足

(2n-1)k<m<=2nk,k=1,2,3…

以省去必定不满足条件的m。

【洛谷】P1145-约瑟夫相关推荐

  1. (枚举)[洛谷P1145约瑟夫]题解|CSDN创作打卡

      题意很简单,我们想到用枚举的方法来做,枚举m.由于好人有k个,所以至少从m=k+1开始枚举.   带着这个思路,我们开始写代码.这是我的第一个版本代码 #include <bits/stdc ...

  2. 洛谷 P1145 约瑟夫

     约瑟夫 n 个人站成一圈,从某个人开始数数,每次数到 m 的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.现在有一圈人,k 个好人站在一起,k 个坏人站在一起.从第一个好人开始数数.你要确 ...

  3. 洛谷P1145 约瑟夫

    题目描述 n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.现在有一圈人,k个好人站在一起,k个坏人站在一起.从第一个好人开始数数.你要确定一个最小 ...

  4. 信息学奥赛一本通 2037:【例5.4】约瑟夫问题 | 1334:【例2-3】围圈报数 | 洛谷 P1996 约瑟夫问题

    [题目链接] ybt 2037:[例5.4]约瑟夫问题 ybt 1334:[例2-3]围圈报数 洛谷 P1996 约瑟夫问题 [题目考点] 1. 循环遍历数组 假设数组下标为1~n,循环控制变量i从1 ...

  5. 【每日一题】洛谷--P1996 约瑟夫问题 java题解

    文章目录 题目链接 题解 题目链接 洛谷–P1996约瑟夫问题 题解 约瑟夫问题细品一下,就是一个链表成环,根据规则要求逐渐remove的一个思路.代码详解如下: package com.compan ...

  6. 杀人游戏约瑟夫环(洛谷P1145题题解,Java语言描述)

    题目要求 题目链接P1145 约瑟夫环问题了解一下 约瑟夫环问题其实在数据结构里与单循环链表关系密切,但是这里模拟就完事~~ 我写过的约瑟夫环问题 AC代码(Java语言描述) import java ...

  7. 洛谷 1145约瑟夫

    打表: #include<iostream>//头文件 using namespace std;//命名空间 int num[14]={0,2,7,5,30,169,441,1872,76 ...

  8. C语言(C++)——洛古P1145 约瑟夫

    n 个人站成一圈,从某个人开始数数,每次数到 m 的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.现在有一圈人,k 个好人站在一起,k 个坏人站在一起.从第一个好人开始数数.你要确定一个最小 ...

  9. 队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)

    题目要求 P1996题目链接 分析 以前就研究过"约瑟夫环"问题: <单循环链表求解约瑟夫环问题(Java语言描述)> <杀人游戏~约瑟夫环(洛谷P1145题题解 ...

  10. 洛谷题库答案(持续更新)

    p1000 超级玛丽游戏  洛谷 p1000 超级玛丽游戏_cyyyyds857的博客-CSDN博客 p1001 A+B problem  A+B problem_cyyyyds857的博客-CSDN ...

最新文章

  1. 清华贵系的期末大作业:奋战三周,造台计算机!
  2. linux c icmp协议 判断主机存活
  3. 2021-05-20 Matlab实现傅里叶变换
  4. 剑指offer面试题15:链表中倒数第K个节点
  5. opencv计算机视觉学习笔记七
  6. 升级鸿蒙系统照片,华为鸿蒙系统照片出炉,神似EMUI,海内外花粉沸腾了
  7. mac idea在mybatis xml文件里引入全限定类名报红解决
  8. tomcat(19)Manager应用程序的servlet类
  9. mysql备份还原(视图、存储过程)
  10. python-main
  11. windows版本的redis
  12. 计算机应用0006作业2,〔计算机应用基本0006〕14秋在线作业2.doc
  13. 思科 GNS3 配置 链路捆绑
  14. 嵌入式系统设计师考试完美笔记
  15. python的十句名言_洗脑最厉害的10句名言名句
  16. 金融计算器,python实现
  17. 关于航空障碍灯的介绍
  18. Excel库存表通过吉度PDA盘点机形成盘点差异表
  19. eclipse快捷键以及使用技巧大全
  20. SRS(简单实时视频服务) 笔记(5)- 视频录制

热门文章

  1. 【网络安全】网站漏洞挖掘思路
  2. 使用汇编语言完成下列C的数组赋值,汇编中的数组分配和指针的实现代码
  3. python 使用PySide2 制作简易图片查看、视频播放器 ,利用pyinstaller 打包发布
  4. char占用几个字节(Byte)?
  5. DMVPN 动态多点隧道技术
  6. Exception in thread java.lang.IllegalThreadStateException
  7. 百度2021秋招面经
  8. java 足球比赛小游戏
  9. pregel 与 spark graphX 的 pregel api
  10. 浏览器无法正常显示latex公式问题