题目链接: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 洗牌问题(模拟)的更多相关文章

  1. 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...

  2. 随手练——HDU 5015 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...

  3. 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)

    HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...

  4. 随手练——HDU 1284 动态规划入门

    #include <iostream> #include <algorithm> #include <string.h> using namespace std; ...

  5. 随手练——HDU 1251 统计难题

    知识点:前缀树.典型的前缀树模板. 这是用next[26]数组的版本,超内存了.(后来发现,用C++交不会超,G++就会超) #include <iostream> #include &l ...

  6. 随手练——HDU 1237 表达式求值(输入格式典型)

    坑了老子半天,结果是 float 范围不够!!! 基本思想: 开一个符号栈,一个数字栈: 碰到数字就入栈,碰到符号就与栈顶符号进行对比,如果当前符号优先级小于栈顶符号,数字栈弹出两个数进行栈顶符号运算 ...

  7. HDU 1210 Eddy's 洗牌问题(找规律,数学)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1210 Eddy's 洗牌问题 Time Limit: 2000/1000 MS (Java/Other ...

  8. HDU 1210 Eddy's 洗牌问题(foj1062) || FOJ1050 Number lengths水

    麻痹,感冒了. ------------------------------------------------感冒了的分割线------------------------------------- ...

  9. hdu 1210 Eddy's 洗牌问题

    Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1,2,3..n,n+1,..2n.这也是 ...

  10. Java集合List模拟“洗牌”操作

    Collection工具类为操作List集合提供了几个有用的方法: reverse().shuffle().sort().swap().rotate(). 小例子: 使用shuffle(),方法模拟洗 ...

随机推荐

  1. SQL Server中的流控制语句

    begin···end 该语句定义sql代码块,通常在if和while语句中使用 declare @num int ; ; begin ; print 'hello word' end if···el ...

  2. [PHP] PHP数组的实现哈希表(HashTable)结构

    PHP中使用最为频繁的数据类型非字符串和数组莫属,使用哈希表实现的PHP数组.1.数据结构:保存哈希表容器,保存数据的容器2.哈希函数实现:需要尽可能的将不同的key映射到不同的槽(bucket)中, ...

  3. Git基础--笔记

    0.取的项目的git仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来 1.在工作目录 ...

  4. UOJ169. 【UR #11】元旦老人与数列

    传送门 考虑用 \(segment~tree~beats\) 那一套理论,维护区间最小值 \(mn\) 和严格次小值 \(se\) 那么可以直接 \(mlog^2n\) 维护前三个操作 考虑维护历史最 ...

  5. C# Timer定时器用法

    System.Timers.Timer timer1 = new System.Timers.Timer(); timer1.Elapsed += new System.Timers.ElapsedE ...

  6. 英文版win10更新以后, 中文软件变成乱码

    原因是非Unicode程序的语言设置失效了 在区域设置里把当前系统区域设置改成"英语(美国)", 重启电脑后再改回"中文(简体, 中国)", 再重启就好了.

  7. Android 获取SD卡的图片资源

    首先我先获得SD卡下的根目录路径: privateString isSdcard(){ File sdcardDir=null; boolean isSDExist=Environment.getEx ...

  8. mac下安装elasticsearch报错Exception BindTransportException[Failed to bind to [9300-9400]]

    解决办法:进入 config目录下 修改 vim elasticsearch.xml network.host设置为 0.0.0.0 即可外网访问.

  9. 立即抢注我的免费1T云空间

    立即抢注我的免费1T云空间 在IDC行业中,有许多的免费空间,而真正的免费空间又能有多少?我是一个草根站长,说实话,为了寻找一个很好的免费空间,我在网上找了好多,几乎所有的免费空间都用过,但当网站运行 ...

  10. Google Developers 中国网站正式发布

    Google Developers 中国网站 (developers.google.cn) 正式发布!Google Developers 中国网站是特别为中国开发者而建立的,它汇集了 Google 为 ...