UVa 305 / POJ 1012 Joseph (如何得到约瑟夫环的下一个位置?)
2014-03-05 19:14
309 查看
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=241
http://poj.org/problem?id=1012
注意代码中的递推式并不能指出实际的位置,但是要让m是满足题意的,这个位置(在减一映射后)必须>=k
当然你也可以打表实现。
http://poj.org/problem?id=1012
注意代码中的递推式并不能指出实际的位置,但是要让m是满足题意的,这个位置(在减一映射后)必须>=k
当然你也可以打表实现。
/*0.079s*/ #include<bits/stdc++.h> using namespace std; int solve(int k) { int m, pos, n = k << 1, i, next; ///注意为了取模的方便,一开始所有人的编号减一 for (m = k;; m++) { pos = m % n; if (pos >= k && pos < n) { ///开始对所有的bad guy行刑,注意已经行刑了一个pos位置的bad guy for (i = 1; i < k; ++i) { next = (pos + m) % (n - i); /// 人越来越少,所以模越来越小 if (next < k || next >= n) break; /// 错误,选了一个good guy pos = next; } if (i == k) break; } } return m + 1; } int main() { int k, ans[14]; for (int i = 1; i < 14; ++i) ans[i] = solve(i); while (scanf("%d", &k), k) printf("%d\n", ans[k]); return 0; }
相关文章推荐
- 在线学习诱惑大!!
- KeychainItemwrapper生成设备唯一标识
- 基于Android 平台简易即时通讯的研究与设计
- 如何在Windows Server 2008 R2上修改IP地址
- 5种方法解除开机密码
- hdu1754(线段树)
- 一些记录关于网上的一些好东西
- UVa:1424 Salesmen
- ubuntu远程失败xrdp重启命令
- pat advanced 1013
- 如何解开开机密码?
- VMware虚拟机桥接方式与真实主机共享上网
- Java中子类和父类间的调用关系
- 字母图形
- JAVA中的向上转型与向下转型
- linux 虚拟机拷贝后无法上网
- 百度天气预报接口
- 临时表的一些练习
- hdu 1856 并查集
- javaweb程序中,普通的java类,不是servlet类读取资源文件的方式