题目链接: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. android 模拟器无法启动问题

    很早之前就碰到过Android Studio模拟器无法启动的问题,今天终于尝试去解决了下,下面将我解决的方法记录下. 模拟器报错信息为: emulator: ERROR: x86 emulation ...

  2. windows上memecache添加多个端口命令

    sc create "Memcached Server1" start= auto binPath= "D:\01_Soft\memcached\memcached.ex ...

  3. Go按照条件编译

    Go 支持按照条件编译,具体来说它是通过 go/build包 里定义的tags和命名约定来让Go的包可以管理不同平台的代码 . 我们这里以下面这个开源项目为例,来看Go的按条件编译, 这个开源项目是把 ...

  4. Guava限流工具RateLimiter使用

    公司最近在推一个限流工具接入,提供的功能有单机限流.集群限流等.想了解一下限流的原理和设计,看了一下wiki里面有提到用了guava的ratelimiter工具,查了一些资料了解了一下 主要的限流算法 ...

  5. Max Sum(经典DP)

    求最长总和序列,状态转移方程:dp[i] = max(dp[i-1]+a[i].a[i]) 因为可能有负数,所以要判断dp是否大于0,如果小于0则序列中断,从中断点开始 起始点可以用数组s保存,有中断 ...

  6. mybatis oracle 顺序模糊匹配

    前言:有时需要顺序模糊匹配字段. 用一半的 % 就好: t.item like #{item}||'%'

  7. Q:java中的泛型数组

     对于java,其是不支持直接创建泛型数组的.当采用如下的方式去创建一个泛型数组时,其会出现错误,编译无法通过的情况. package other.jdk1_5; /** * 该类用于演示泛型数组的创 ...

  8. 02.php面向对象——构造方法&析构方法

    <?php //自己写的构造方法 class Computer{ public function Computer(){ echo '构造方法'; } } new Computer();//这样 ...

  9. is_array判断是否为数组

    if(is_array($arr)){ echo "是数组"; }else{ echo "不是数组"; }

  10. jQuery的attr()与prop()的区别

    jQuery的attr()与prop()都是用于获取与设置属性的,但它们又各有不同. attr()一般是用于设置默认值,prop()一般是用于设置属性值,即对于像“diabled”,"che ...