HDU 5643:King's Game 约瑟夫问题
来源:互联网 发布:c语言中mod函数 编辑:程序博客网 时间:2024/05/18 21:09
King's Game
Accepts: 249
Submissions: 671
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
为了铭记历史,国王准备在阅兵的间隙玩约瑟夫游戏。它召来了 n(1≤n≤5000) 个士兵,逆时针围成一个圈,依次标号 1,2,3...n。第一轮第一个人从 1 开始报数,报到 1 就停止且报到 1 的这个人出局。第二轮从上一轮出局的人的下一个人开始从 1 报数,报到 2 就停止且报到 2 的这个人出局。第三轮从上一轮出局的人的下一个人开始从 1 报数,报到 3 就停止且报到 3 的这个人出局。第 n−1 轮从上一轮出局的人的下一个人开始从 1 报数,报到 n−1 就停止且报到 n−1 的这个人出局。最后剩余的人是幸存者,请问这个人的标号是多少?
输入描述
第一行一个整数表示测试组数:T(0<T≤5000) 。每组数据占一行,包含一个整数 n,表示 n 个人围成一圈。
输出描述
共 T 行。对每组数据,输出幸存者的编号。
输入样例
223
输出样例
22
Hint
对于第一组数据,一开始报到 1 的人即标号为 1 的人退出,幸存者是 2 号。对于第二组数据,一开始报到 1 的人即标号 1 的人退出。接着 2 号报 1,3 号报 2,报到 2 的人即 3 号退出。幸存者是 2 号。
之前做过约瑟夫问题,但当时还比较年轻(......),然后也没有想得太清楚。。。
n个人从0编号一直到n-1,围成一个逆时针的圈,每次淘汰数到k的人。倒推过来,每一次从淘汰数到k的那个人,然后,上一次标号为k的人下一轮标号为0,所以可以得到这一次标号为x的,上一次标号为(x+k)%i,i是上一轮的人数。然后最后剩下的那个人标号是0。从两个人开始倒着推,得到结果。
代码:
#pragma warning(disable:4996)#include <iostream>#include <functional>#include <algorithm>#include <cstring>#include <vector>#include <string>#include <cstdio>#include <cmath>#include <queue>#include <stack>#include <deque>#include <set>#include <map>using namespace std;typedef long long ll;#define INF 0x3fffffffconst ll mod = 1e9 + 7;const int maxn = 5005;int res[maxn];void init(){memset(res, 0, sizeof(res));int i, j, k, n, ans;res[1] = 1;for (i = 2; i <= 5000; i++){ans = 0;for (j = 2; j <= i; j++){ans = (ans + i - j + 1) % j;}res[i] = ans + 1;}}void solve(){int k;scanf("%d", &k);printf("%d\n", res[k]);}int main(){#ifndef ONLINE_JUDGE freopen("i.txt", "r", stdin);freopen("o.txt", "w", stdout);#endifinit();int t;scanf("%d", &t);while (t--){solve();}return 0;}
0 0
- HDU 5643:King's Game 约瑟夫问题
- hdu 5643 King's Game 数学 约瑟夫问题
- 约瑟夫环问题——(Hdu-5643,King's Game)
- HDU 5643 King's Game 【约瑟夫环】
- hdu 5643 King's Game (dp约瑟夫环)
- hdu 5643King's Game(约瑟夫游戏,递归)
- HDU 5643 King's Game (约瑟夫环问题的变形 递推)
- HDU 5643 King's Game
- HDU 5643 bestcoder Round #75 king's game [威瑟夫问题]
- hdu5643 King's Game(约瑟夫环+线段树)
- hdoj_5643 King's Game(约瑟夫环问题变种)----超时版本(自己模拟的循环链表)
- hdu5463---King's Game
- hdu----King's Phone
- BestCoder Round #75 King's Game
- BestCoder Round #75 King's Game
- HDU 5640 King's Cake
- HDU 5642 King's Order
- HDU 5640 King's Cake
- 利用ffmpeg+opencv实现画中画 .
- 高并发量网站解决方案
- wampserver出现You don’t have permission to access/on this server
- 【2016年Esri开发者大会亮点解析】Geo Analytics,给力的Big Data分析工具
- iOS-Touch移动图解和控制器嵌套
- HDU 5643:King's Game 约瑟夫问题
- 七牛API
- Qt使用教程之使用Qt Quick UI表单(六)
- CentOS7.1 KVM虚拟化之常用管理虚拟机命令(3)
- 3月14几个小标签
- 复合索引
- bash配置
- Asp.net MVC使用KindEditor4
- Session和Cookie的关系