随手练——HDU-1210 洗牌问题(模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1210
模拟的题目真不知道怎么写的话,就把真实情况展示出来,有图才有真相:
测试代码:
- #include <iostream>
- using namespace std;
- int main() {
- int N;
- cin >> N;
- * N + ];
- * N + ];
- ; i <= * N; i++) {
- a[i] = i;
- }
- ; i <= * N; i++) {
- b[(i * ) % ( * N + )] = a[i];
- }
- ; i <= * N; i++) {
- cout << b[i] << " ";
- }
- cout << endl;
- ; i <= * N; i++) {
- a[(i * ) % ( * N + )] = b[i];
- }
- ; i <= * N; i++) {
- cout << a[i] << " ";
- }
- cout << endl;
- ; a[]!=&&b[]!=; k++) {
- )) {
- ; i <= * N; i++) {
- b[(i * ) % ( * N + )] = a[i];
- }
- ; i <= * N; i++) {
- cout << b[i] << " ";
- }
- cout << endl;
- }
- else {
- ; i <= * N; i++) {
- a[(i * ) % ( * N + )] = b[i];
- }
- ; i <= * N; i++) {
- cout << a[i] << " ";
- }
- cout << endl;
- }
- }
- ;
- }
我们先假设N=4时,画个图看一下变化情况:
蓝色:1→2→4→8→7→5→1:六步
橙色:3→6→3 :两步
我们可以想象一下,每次将牌分成两半,不停的进行依次归并,直到所有牌回到正确位置(而且,不论哪种排列1都是最长的循环之一)。
当前位置是i,下一次位置是:
正向(位置上1,2,4,8):i * 2
反向(也可以看成1,2,4,8):(i - n) * 2 - 1 = 2 * i - 2 * n - 1(n是4,不是8,别弄错了)
结论:每次把在第i个位置的数移动到位置 i * 2 % (2 * N+1) 的位置上。
完整代码(%运算要比简单乘除慢很多,还是选择分开了,虽然代码长了一点):
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- int main() {
- int n;
- while (~scanf("%d",&n)) {
- , res = ;
- )
- ) {
- i <<= ;
- * n)
- i = i - * n - ;
- res++;
- }
- cout << res << endl;
- }
- ;
- }
随手练——HDU-1210 洗牌问题(模拟)的更多相关文章
- 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...
- 随手练——HDU 5015 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...
- 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)
HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...
- 随手练——HDU 1284 动态规划入门
#include <iostream> #include <algorithm> #include <string.h> using namespace std; ...
- 随手练——HDU 1251 统计难题
知识点:前缀树.典型的前缀树模板. 这是用next[26]数组的版本,超内存了.(后来发现,用C++交不会超,G++就会超) #include <iostream> #include &l ...
- 随手练——HDU 1237 表达式求值(输入格式典型)
坑了老子半天,结果是 float 范围不够!!! 基本思想: 开一个符号栈,一个数字栈: 碰到数字就入栈,碰到符号就与栈顶符号进行对比,如果当前符号优先级小于栈顶符号,数字栈弹出两个数进行栈顶符号运算 ...
- HDU 1210 Eddy's 洗牌问题(找规律,数学)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1210 Eddy's 洗牌问题 Time Limit: 2000/1000 MS (Java/Other ...
- HDU 1210 Eddy's 洗牌问题(foj1062) || FOJ1050 Number lengths水
麻痹,感冒了. ------------------------------------------------感冒了的分割线------------------------------------- ...
- hdu 1210 Eddy's 洗牌问题
Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1,2,3..n,n+1,..2n.这也是 ...
- Java集合List模拟“洗牌”操作
Collection工具类为操作List集合提供了几个有用的方法: reverse().shuffle().sort().swap().rotate(). 小例子: 使用shuffle(),方法模拟洗 ...
随机推荐
- Quartz大致介绍(一)
1. 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳 ...
- springboot在阿里CentOS 7后台永久运行
查看Java进程可以使用 ps -ef|grep java 首次后台永久启动,会把日志输出到新建的log.file文件 nohup java -jar demo-0.0.1-SNAPSHOT.jar ...
- github flow
github flow Github flow 是Git flow的简化版,专门配合"持续发布".它是 Github.com 使用的工作流程 它只有一个长期分支,就是master, ...
- python 实现websocket
python中websocket需要我们自己实现握手代码,流程是这样:服务端启动websocket服务,并监听.当客户端连接过来时,(需要我们自己实现)服务端就接收客户端的请求数据,拿到请求头,根据请 ...
- delphi之读写文件的三种方式
一.Tstrings.Tstringlist procedure TForm1.Button2Click(Sender: TObject); var strlist: TStringList; pat ...
- [SD2015]序列统计——solution
http://www.lydsy.com/JudgeOnline/problem.php?id=3992 很容易得出DP方程: f[i][c]=f[i-1][a]*f[1][b]① 其中a*b%M=c ...
- sql-(Cross||Outer)Apply
Apply - 涉及以下两个步骤中的一步或两步(取决于Apply的类型): 1.A1:把右表表达式应用于左表的行 2.A2:添加外部行 Apply运算符把右表表达式应用于左输入的每一行.右表达式可以引 ...
- css权威指南读书笔记-第10章浮动和定位
这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...
- Java设计模式—解释器模式&迭代器模式简介
解释器模式在实际的系统开发中使用得非常少,因为它会引起效率.性能以及维护等问题,一般在大中型的框架型项目能够找到它的身影,如一些数据分析工具.报表设计工具.科学计算工具等,若你确实遇到" ...
- Flume -- Transfer one type of source to another type
Source within Flume is a kind of Server for outside client. Sink within Flume is a kind of client fo ...