UVALive 4727 Jump
来源:互联网 发布:百度云显示网络不给力 编辑:程序博客网 时间:2024/06/06 06:26
大白书习题,为约瑟夫变形问题。给你n个数组成一个环,从第k个元素开始删除,每隔k个元素删一个。。。
经典的约瑟夫问题是求最后一个剩余的元素,可由递推公式 f[1] = 0, f[n] = (f[n - 1] + k) % n(下标0~~n-1,公式证明请见百度百科)得到。该题是让输出最后三个被删除的元素,其实该递推公式表示意思是:最后删除的那个元素时,有且仅有那个元素,然后一层一层递推得到删除的该元素在原序列中的序号。所以,如果我们知道了当剩下两个人的时候第一次删的是那个元素,该元素即为倒数第二个被删的元素,考虑到倒数倒数第二个元素删的是(k - 1) % 2, 即应将递推式改为,f[2] = (k - 1) % 2, f[n] = (f[n - 1] + k) % n, 即可求得倒数第二个元素。同理求倒数第三个元素。。
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#define LL long longusing namespace std;const int N = 555555;int f[N];int a[11];int main(){ //freopen("input.txt", "r", stdin); int t, n, k, i, j; scanf("%d", &t); while(t --) { scanf("%d%d", &n, &k); for(i = 1; i <= 3; i ++) { f[i] = (k - 1) % i; for(j = i + 1; j <= n; j ++) f[j] = (f[j - 1] + k) % j; a[i] = (1 + f[n]) % n; if(a[i] <= 0) a[i] += n; } printf("%d %d %d\n", a[3], a[2], a[1]); }}
- UVALive 4727 Jump
- UVALive 4727 Jump
- UVALive - 4727 Jump
- UVALive - 4727 Jump 约瑟夫环
- uvalive 4727 jump跳跃(dp/约瑟夫问题变形)
- UVALive 4727
- LA 4727 Jump
- Jump
- Jump
- Jump
- jump
- Jump
- jump
- Jump
- LA-4727 Jump(递推)
- UVALive
- UVALive
- UVALive
- hdu4680 About set -------splay
- poj 2253 Frogger
- bitmap的使用
- 服务(Service)全解析(二)--bindService
- SQLite数据库开发—3个类搞定android数据库开发
- UVALive 4727 Jump
- 服务(Service)全解析(一)--startService
- android中的UI中的窗口之Window类介绍
- 用Eclipse打包jar程序直接运行(2.Eclipse打包步骤)_hanCSDN_20130818
- IE浏览器使用js调用阅读插件调用二代证阅读器读取身份证信息
- [poj 1125]Stockbroker Grapevine[Floyd最短路]
- test
- 怎样在VS2010中打开vs2012的项目
- test