And Then There Was One POJ - 3517(变形约瑟夫环+规律)

题意:

约瑟夫问题的变式。先指定第m个人必须死,然后每隔k个人死一个。求最后那个死的人的编号是什么。

题目

Let’s play a stone removing game.

Initially, n stones are arranged on a circle and numbered 1, …, n clockwise (Figure 1). You are also given two numbers k and m. From this state, remove stones one by one following the rules explained below, until only one remains. In step 1, remove stone m. In step 2, locate the k-th next stone clockwise from m and remove it. In subsequent steps, start from the slot of the stone removed in the last step, make k hops clockwise on the remaining stones and remove the one you reach. In other words, skip (k − 1) remaining stones clockwise and remove the next one. Repeat this until only one stone is left and answer its number. For example, the answer for the case n = 8, k = 5, m = 3 is 1, as shown in Figure 1.

在这里插入图片描述
Initial state: Eight stones are arranged on a circle.

Step 1: Stone 3 is removed since m = 3.

Step 2: You start from the slot that was occupied by stone 3. You skip four stones 4, 5, 6 and 7 (since k = 5), and remove the next one, which is 8.

Step 3: You skip stones 1, 2, 4 and 5, and thus remove 6. Note that you only count stones that are still on the circle and ignore those already removed. Stone 3 is ignored in this case.

Steps 4–7: You continue until only one stone is left. Notice that in later steps when only a few stones remain, the same stone may be skipped multiple times. For example, stones 1 and 4 are skipped twice in step 7.

Final State: Finally, only one stone, 1, is on the circle. This is the final state, so the answer is 1.

Input

The input consists of multiple datasets each of which is formatted as follows.

n k m

The last dataset is followed by a line containing three zeros. Numbers in a line are separated by a single space. A dataset satisfies the following conditions.

2 ≤ n ≤ 10000, 1 ≤ k ≤ 10000, 1 ≤ m ≤ n

The number of datasets is less than 100.

Output

For each dataset, output a line containing the stone number left in the final state. No extra characters such as spaces should appear in the output.

Sample Input

8 5 3
100 9999 98
10000 10000 10000
0 0 0

Sample Output

1
93
2019

分析

首先不考虑第一个必须死的人是m的情况。我们把n个人编号为[0,n-1]。那么第一轮出局的就是编号为k-1的人,剩下的人的编号是[0,k−2]∪[k,n−1]。然后我们从编号为k的人开始,循环一圈给所有人重新分配编号

0----->i

1----->i+1

2----->i+2

… …

k-2----->n-2

k-1(杀死)

k----->0///倒推,从这里最容易看出来dp[i]=(dp[i-1]+k)%i;(此时i==n)

k+1----->1

… …

n-2----->i-2

n-1----->i-1

其实这个问题就是问如何用存活者在i-1个人中的编号求出存活者在i个人中的编号。我们知道,从原问题推到子问题其实是把所有人的编号-k,那么从子问题推到原问题就是把人的编号+k,但要注意,此时+k可能会大于当前人的规模i,所以要对i取膜。

AC代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int M=1e4+10;
int dp[M];
int n,m,k;int main()
{while(~scanf("%d%d%d",&n,&k,&m)&&(m||n||k)){memset(dp,0,sizeof(dp));for(int i=2;i<n;i++)dp[i]=(dp[i-1]+k)%i;dp[n]=(dp[n-1]+m)%n;printf("%d\n",dp[n]+1);}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

明明可以靠技术吃饭,现在却非要出来当编剧!

这是头哥侃码的第199篇原创前不久&#xff0c;有位读者深夜时在后台留言说&#xff1a;“我在某技术大会现场听过你的分享。”“说实话&#xff0c;第一次见你&#xff0c;真的很难想象一幅猛男外表的人竟然会有这样的经历和谈吐&#xff0c;这两点让我很钦佩。”这还不算完&am…

[C++11]decltype类型推导规则

在某些情况下&#xff0c;不需要或者不能定义变量&#xff0c;但是希望得到某种类型&#xff0c;这时候就可以用C11提供的decltype关键字了&#xff0c;它的作用是在编译器编译的时候推导出一个表达式的类型。 语法: decltype (表达式)decltype是"declare type “的缩写…

linux不能更改密码,Linux服务器无法更改密码的解决办法--passwd: User not known

上面仅是告知我&#xff0c;这些帐号并没有家目录&#xff0c;由于那些帐号绝大部分都是系统帐号&#xff0c; 确实也不需要家目录的&#xff0c;所以&#xff0c;那是‘正常的错误&#xff01;’,相对应的群组检查可以使用 grpck 这个指令。pwck 确保系统鉴认信息的完整性,pwc…

PowerBIDeskTop报表元数据批量更新(可用于翻译场景)

PowerBI在多国语言场景上有极大的缺陷&#xff0c;原有的Sqlserver的SSAS和Azure的AS模型层翻译功能&#xff0c;在Excel和PowerBIDeskTop客户端上均可完美适配。但到了PowerBI Pro的Service网页端时&#xff0c;竟然不支持。这个问题已经明确是官方给出的答复&#xff0c;起码…

操作系统习题——(习题二)

操作系统习题——第一章 1&#xff0e; OS 有哪几大特征&#xff1f;其最基本的特征是什么? 答&#xff1a;并发性、共享性、虚拟性和异步性四个基本特征&#xff1b;最基本的特征是并发性和共享性。 2.处理机管理有哪些主要功能&#xff1f; 答&#xff1a;处理机管理的主…

[C++11]decltype在泛型编程中的使用举例

关于decltype的应用多出现在泛型编程中&#xff0c;比如我们编写一个类模板&#xff0c;在里面添加遍历容器的函数&#xff0c;操作如下: 代码如下: #include <iostream> #include <list>using namespace std;template<typename T> class Container { publ…

追了多年的开发框架,你还认识指针吗?

一&#xff1a;背景1. 讲故事高级语言玩多了&#xff0c;可能很多人对指针或者汇编都淡忘了&#xff0c;本篇就和大家聊一聊指针&#xff0c;虽然C#中是不提倡使用的&#xff0c;但你能说指针在C#中不重要吗&#xff1f;你要知道FCL内库中大量的使用指针&#xff0c;如String,E…

linux apt-get 安装 根目录,技术|apt-get 和 apt-cache 命令实例展示

apt-get和apt-cache是Ubuntu Linux中的命令行下的包管理工具。 apt-get的GUI版本是Synaptic包管理器。本篇中我们会展示apt-get和apt-cache命令的15个不同例子。示例&#xff1a;1 列出所有可用包linuxtechilocalhost:~$ apt-cache pkgnamesaccount-plugin-yahoojpceph-fusedvd…

[PAT乙级]1031 查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下&#xff1a; 首先对前17位数字加权求和&#xff0c;权重分配为&#xff1a;{7&#xff0c;9&#xff0c;10&#xff0c;5&#xff0c;8&#xff0c;4&#xff0c;2&#xff0c;1&am…

Long Path CodeForces - 407B(动态规划+思维+公式推导)

题意&#xff1a; 起点为1&#xff0c;终点为n1&#xff0c;对应第i个各点&#xff0c;如果我奇数次到达i点&#xff0c;那么下一步走到a【i】的位子&#xff0c;如果是偶数次到达&#xff0c;那么下一步走到i1的位子。 问从1走到n1一共需要走多少步&#xff1f;结果对1e97取模…

[PAT乙级]1032 挖掘机技术哪家强

为了用事实说明挖掘机技术到底哪家强&#xff0c;PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。 输入格式&#xff1a; 输入在第 1 行给出不超过 10​5​​ 的正整数 N&#xff0c;即参赛人数。随后 N 行&#xff0c;每行给出一位参赛者的信息…

断!舍!离!

最近颈椎病很严重&#xff0c;各种寻医问药&#xff0c;找各路中西医专家治疗。无奈&#xff0c;一直不见好。每周我都会去一个中医大夫那里做推拿&#xff0c;有一次我抱怨&#xff0c;这个病怎么这么难弄好。大夫笑了笑&#xff0c;说&#xff1a;颈椎病其实是个哲学问题。我…

linux权限746,linux文件权限学习笔一

linux文件权限学习随笔一linux中&#xff0c;文件权限一直是困扰初学者的难题。但是还必须要把文件权限搞明白&#xff0c;否则你就很难进一步学习linux&#xff0c;因为你听不懂他的说什么&#xff0c;看不懂他的身份&#xff0c;不知道他要做什么。我已经习惯使用windows&…

Compound Words UVA - 10391(c++用法中substr函数用法+map实现)

题意&#xff1a; 给出字典中一堆单词&#xff0c;单词的输入方式是以字典序输入的。问&#xff1a;在这一堆单词中&#xff0c;有那些单词是通过其它两个单词组合而来的。按字典序升序输出这些单词。 题目&#xff1a; You are to find all the two-word compound words in…

[C++11]返回值类型后置

在泛型编程中&#xff0c;可能需要通过参数的运算来得到返回值类型。 语法: auto func(参数1,参数2,...)->decltype(参数表达式)代码如下: #include <iostream> using namespace std;//template<typename R,typename T,typename U> //R add01(T t, U u) //{ …

在鹅厂面试5轮后扑街!微服务架构,我拿什么拯救你!

上周五接到朋友的电话&#xff0c;此前他一路披荆斩棘&#xff0c;离鹅厂Offer大概仅一步之遥。电话一接通我就说了一通让他请客吃饭的话&#xff0c;对面沉默了几秒钟&#xff0c;淡淡地说了句 “我终面没过....” 这让我一时语塞不知如何安慰他。两个中年油腻男硬是打了2小时…

linux加大ram 内核需要,Linux 5.1内核发布:io_uring接口+支持持久性内存用作RAM

拼 命 加 载 中 ...Linus Torvalds今天发布了Linux Kernel 5.1内核&#xff0c;这是一个功能强大的内核分支&#xff0c;它带来了许多重要的新功能&#xff0c;包括但不限于&#xff1a;改进了对IntelFastboot的支持&#xff1b;对Intel 22260 Wi-Fi的支持&#xff1b;对Raspbe…

Minimum Inversion Number HDU - 1394(求一个数字环的逆序对+多种解法)

题意&#xff1a; 给出n个数&#xff08;0~n-1&#xff0c;每个数仅出现一次&#xff09;,问它长为n的循环序列中逆序对最少的数量。 多种解法&#xff1a;暴力树状数组分治规律推导公式 题目&#xff1a; The inversion number of a given number sequence a1, a2, …, an…

C++实现拓扑排序(vector模拟邻接表存储,栈实现)

代码如下: #include<iostream> #include <vector> #include <string> #include <stack> using namespace std; const int N 10010;int in[N]; vector<int>v[N]; vector<int>printElem;int main() {int n, m;while (cin >> n >&…

如何借助Kubernetes实现持续的业务敏捷性

导语在当今以数字为动力&#xff0c;以客户为中心的世界中&#xff0c;敏捷性已成为组织提高其创建软件的速度、提高响应能力以满足不断变化的客户需求、保持敏捷性以适应变化的关键要素。敏捷不是商品&#xff0c;无法购买或轻易获得。要为组织创造可持续的敏捷性&#xff0c;…