uvalive4727
2016-04-19 20:05
363 查看
题目大意:
给出n,k,n表示的是数字的个数,数字都是从1开始的。
k表示的是每隔几个挑选出一个数字。
输出最后的三个数字。
思路:
约瑟夫环问题。
类似于uvalive3882
代码:
给出n,k,n表示的是数字的个数,数字都是从1开始的。
k表示的是每隔几个挑选出一个数字。
输出最后的三个数字。
思路:
约瑟夫环问题。
类似于uvalive3882
代码:
#include <iostream> using namespace std; #include <cstring> #include <stdio.h> int dp[500005]; int main() { int T; int n,m; scanf("%d",&T); while(T--) { int n,m,s = 0,ans[3] = {0}; int pos1,pos2,pos3; scanf("%d %d",&n,&m); dp[1] = 0; for(int i = 2; i <= n; i++) { dp[i] = (dp[i - 1] + m)%i; } ans[0] = dp + 1; pos1 = dp[2] = (0 + m) % 2; pos2 = dp[2] = (0 + m) % 2 == 1? 0 : 1; dp[2] = pos2; for(int i = 3; i <= n; i++) dp[i] = (dp[i - 1] + m)%i; ans[1] = dp + 1; bool vis[3] = {0}; vis[(pos1 + m)%3] = 1; vis[(pos2 + m)%3] = 1; for(int i = 0; i < 3; i++) if(vis[i] == 0) pos3 = i; dp[3] = pos3; for(int i= 4; i <= n; i++) dp[i] = (dp[i - 1] + m)%i; ans[2] = dp + 1; printf("%d %d %d\n",ans[2],ans[1],ans[0]); } return 0; }
相关文章推荐
- eclipse快捷键整理
- 个人总结01
- 用两个栈实现队列
- 基于redis的分布式ID生成器
- 关于 Android 进程保活,你所需要知道的一切
- C++之tinyXML使用
- 需求分析
- android学习(隐藏菜单栏)
- poj 2406 Power Strings
- HDU 2191.悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【多重背包】【4月19】
- ARM 系列芯片
- 求大数乘方的前n位数字(对数加快速幂)
- Oracle impdp报错
- android studio 中报Error:Execution failed for task ':app:mergeDebugResources'的解决方法
- 记一次映射公网地址FTP服务问题的解决方法
- POJ 3273-Monthly Expense(二分+贪心)
- 胖子实习(一)——SSH(spring3+Struts2+Hibernate4)简单构建框架
- poj1321棋盘问题
- hdu 1973 Prime Path
- 项目中遇到的一个js页面加载问题