P1168 - 罗马轮盘

题目描述

历史学家弗拉维乌斯·约瑟夫斯记载了公元 67 年罗马-犹太冲突中,罗马人攻占了他所指挥的约塔帕塔城。约瑟夫斯逃脱后发现自己与 40 名同伴被困在一个洞穴中。罗马人发现了他们的位置并邀请他投降,但他的同伴们拒绝让他投降。因此,他建议他们通过抽签的方式一个接一个地互相杀死。传统说法是,抽签的方法是站成一个圆圈,从某一点开始数,每数到第三个人就将其杀死。这个过程的唯一幸存者是约瑟夫斯,他随后向罗马人投降。这就引出了一个问题:约瑟夫斯之前是否曾在黑暗角落里悄悄用 41 颗石子练习过,或者他是否通过数学计算得出自己应该站在第 31 个位置才能生存?

在阅读了这起骇人听闻的事件的描述后,你开始担心自己将来某个时候会遇到类似的情况。为了为这种可能性做好准备,你决定编写一个程序,在你的掌上电脑上运行,以确定计数过程应从哪个位置开始,以确保你将是唯一的幸存者。

特别地,你的程序应能够处理约瑟夫问题描述的以下变体。n > 0 个人最初围成一圈,面向内侧,并从 1 到 n 编号。编号从 1 到 n 按顺时针方向连续进行。你分配的编号是 1。从编号为 i 的人开始,按顺时针方向计数,直到数到编号为 k(k > 0)的人,该人立即被处死。然后我们从被害者左侧紧邻的人开始,继续顺时针方向再数 k 个人。被选中的编号为 k 的人负责埋葬被害者,然后返回被害者之前所在的位置。计数随后从他左侧的紧邻的人开始,第 k 个人被处死,依此类推,直到只剩下一人。

例如,当 n = 5,k = 2,i = 1 时,处决顺序是 2、5、3 和 1。幸存者是 4。

输入格式

你的程序必须读取包含 n 和 k 值的输入行(按此顺序)。输入以一行 n 和 k 均为$0$的值结束。

你的程序可以假设最多有 100 人参加此活动。

输出格式

对于每一行输入,输出应从哪一个人的编号开始计数,以确保你是唯一的幸存者。例如,在上述情况下,安全的起始位置是 3。

输入输出样例 #1

输入 #1

5 2
1 5
0 0

输出 #1

3
1

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:P1168.in,输出文件名为:P1168.out