UVA305 - Joseph(数论 + 打表)

题目链接

题目大意:约瑟夫环问题:n个人围成一圈,每次都淘汰第m个人,问最后一个幸存下来的人的编号。

这题的意思有点不一样,它规定前面的k个人是好人,后面的k个人是坏人(2

k形成环)。问最小的m是多少,可以先把后面的k个坏人淘汰再淘汰好人。

解题思路:这题有个递推式:ai = (ai - 1 + m - 1) % (2

k - (i - 1))

ai表示第i次淘汰的人的编号。后面取余的是剩下的人数。

注意这题的k仅仅可能有14种,可是測试的例子可能有非常多,所以要先将每种k的可能相应的值算出来保存下来。不然会超时。

代码:

#include <cstdio>
#include <cstring> using namespace std; const int N = 20;A int solve (int k) { int n = 2 * k;
int m = k + 1;
int pre, cnt;
while (1) { cnt = 1;
pre = (m % n) == 0 ? n : m % n;
while (cnt <= k) {
if (pre <= k)
break;
pre = (pre + m - 1) % (n - cnt) == 0 ? (n - cnt) : (pre + m - 1) % (n - cnt);
cnt++;
} if (cnt == k + 1)
return m;
else { if (m % n == 0)
m += k + 1;
else
m++;
}
}
} int main () { int k;
int ans[N];
for (int i = 1; i < 15; i++)
ans[i] = solve(i);
while (scanf ("%d", &k) && k) {
printf ("%d\n", ans[k]);
}
return 0;
}

最新文章

  1. h5面试题集合
  2. Android 实现QQ扩展listview(expandlistview)
  3. 用js加密你的重要信息
  4. #CSDN刷票门# 有没有人在恶意刷票?CSDN请告诉我!用24小时监控数据说话!
  5. web服务器之nginx与apache
  6. [Angularjs]ng-class,ng-class-even,ng-class-odd
  7. Linux创建线程
  8. JAVA类与对象(五)----对象的生成、使用
  9. ASP.NET 之 检测到在集成的托管管道模式下不适用的ASP.NET设置
  10. HDU 5965 Gym Class 贪心+toposort
  11. WebService-相关概念介绍
  12. hdu 4055 Number String(有点思维的DP)
  13. 【NOIP2014】Day1题解+代码
  14. 利用jackson-databind,复杂对象对象和json数据互转
  15. 【转】Shell执行MySql操作
  16. 【翻译】在Ext JS应用程序中构建可维护的控制器
  17. 结合FireBreath在Chrome/FireFox的多进程模式下崩溃一例
  18. 转:为什么要有Spring?
  19. 使用laravel搭建CURD后台页面
  20. 【Linux】SecureCRT连接Linux乱码

热门文章

  1. 我写过的软件之FileExpert
  2. (1)cocos2d-x-2.2.4搭建windows开发环境
  3. UFLDL教程笔记及练习答案二(预处理:主成分分析和白化)
  4. 数字证书及CA的扫盲介绍(转)
  5. Erlang学习: EUnit Testing for gen_fsm
  6. poj2761(treap入门)
  7. hdu 1394 Minimum Inversion Number(线段树之 单点更新求逆序数)
  8. Windows Phone开发(10):常用控件(上)
  9. java线程学生进实训室
  10. 全部编程皆为Web编程