NBUT 1225 NEW RDSP MODE I
2015-08-23 22:47
260 查看
[1225] NEW RDSP MODE I
时间限制: 1000 ms 内存限制: 131072 K问题描述
Little A has became fascinated with the game Dota recently, but he is not a good player. In all the modes, the rdsp Mode is popular on online,
in this mode, little A always loses games if he gets strange heroes, because, the heroes are distributed randomly.
Little A wants to win the game, so he cracks the code of the rdsp mode with his talent on programming. The following description is about the rdsp
mode:
There are N heroes in the game, and they all have a unique number between 1 and N. At the beginning of game, all heroes will be sorted by the number
in ascending order. So, all heroes form a sequence One.
These heroes will be operated by the following stages M times:
1.Get out the heroes in odd position of sequence One to form a new sequence Two;
2.Let the remaining heroes in even position to form a new sequence Three;
3.Add the sequence Two to the back of sequence Three to form a new sequence One.
After M times' operation, the X heroes in the front of new sequence One will be chosen to be Little A's heroes. The problem for you is to tell
little A the numbers of his heroes.
输入
There are several test cases.
Each case contains three integers N (1<=N<1,000,000), M (1<=M<100,000,000), X(1<=X<=20).
Proceed to the end of file.
输出
For each test case, output X integers indicate the number of heroes. There is a space between two numbers. The output of one test case occupied exactly one line.
样例输入
5 1 2 5 2 2
样例输出
2 4 4 3
提示
In case two: N=5,M=2,X=2,the initial sequence One is 1,2,3,4,5.After the first operation, the sequence One is 2,4,1,3,5. After the second operation, the sequence One is 4,3,2,1,5.So,output 4 3.
来源
辽宁省赛2010
题目意思是:输入n,m,x,刚开始有一个1……n的排列,然后定义了一种操作,是将数组中的奇数位的数字选出来,按照顺序放到数组最后面,偶数位按照顺序放到奇数位的后面,进行m次这样的操作之后,输出前x个数字。
分析:找到循环节T,利用T去约m,然后再将很小的m拿去模拟,输出前x个.
#include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <string> #include <vector> #include <cmath> #include <ctime> #include <queue> #include <stack> #include <set> #include <map> using namespace std; typedef long long LL; const int mx = 1e6 + 10; const int inf = 0x3f3f3f3f; int num[mx]; int n,m,x; int find_t() { //找循环周期T int cnt=0,cur=1; do{ if(cur*2<=n) cur*=2; else cur=(cur-n/2)*2-1; cnt++; } while(cur!=1); return cnt; } int main() { while(~scanf("%d%d%d",&n,&m,&x)) { for(int i=1; i<=n; i++) num[i]=i; int T=find_t(); m%=T; for(int i=1; i<=x; i++) { if(i!=1) printf(" "); for(int j=1; j<=m; j++) { if(num[i]*2<=n) num[i]*=2; else num[i]=(num[i]-n/2)*2-1; } printf("%d",num[i]); } printf("\n"); } return 0; }
相关文章推荐
- Qt中如何添加.qrc文件
- [HDOJ1045]Fire Net
- DesignPattern_Java:Abstract Factory Pattern
- csdn初次尝试写博客
- Linux学习日记--基础命令(2)--文件查看,命令历史,命令展开
- SVN服务器搭建和使用(三) (转载)
- KVC基础
- [已解决] jquery只能取得表格的第一行的第一个单元格数值
- Java泛型应用示例
- Linux命令:head,tail命令使用方法
- CentOS7 安装boost
- elisp url库简要说明
- pg_config executable not found
- java新手笔记24 Math/String对象
- Android开发大牛CSDN博客整理
- SVN服务器搭建和使用(二) (转载)
- 玩转linux第三天之history、alias、unalias 、mkdir、rmdir、tree命令(一)
- HashMap与hashCode以及equals
- ibatis传入list对象
- 【C#】事务