题目链接: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. 引入第三方js文件,报错

    错误:Mixed Content: The page at 'https://localhost:44336/MENU' was loaded over HTTPS, but requested an ...

  2. HDU 2433 (最短路+BFS+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=2433 这个问题因为路径都是1,所以可以用bfs遍历 可以看这几篇文章讲解: http://blog.csdn.n ...

  3. linux ubuntu 安装nginx

    参考原文 在Ubuntu下安装Nginx有以下方法,但是如果想要安装最新版本的就必须下载源码包编译安装. 一.基于APT源安装 sudo apt-get install nginx 安装好的文件位置: ...

  4. Django请求生命周期之响应内容

    Django请求生命周期: 1.发送http请求2.服务器接受,根据请求头中的url在路由关系表中进行匹配(从上到下)3.匹配成功后,执行指定的views函数 URL -> 函数 ==>F ...

  5. PHP实用系统函数之数组篇

    PHP中十分实用的系统函数 array array_merge 说明:array  array_merge ( array $array1 [, array $... ] ) 将一个或多个数组的单元合 ...

  6. git基础命令。

    创建一个新的本地仓库    git init 克隆远程服务器    git clone URL 打开一个文件夹   cd 添加文件   git add . 本地提交更改   git commit -m ...

  7. 个人小项目——Java实现WC功能

    这个小项目用了两种方法解决了该功能的实现. 1.两种方法的功能和具体实现 代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文 ...

  8. 结合java的反射和泛型性质简化JDBC和相应的同步等服务器数据库操作代码

    github地址:https://github.com/hzphzp/HeartTrace_Server 我们的服务器端数据库并没有用sqllite, 而是直接用mysql,并且用JDBC直接进行操作 ...

  9. 用squid做http/https正向代理

    0.环境准备 VM1(server):nat-192.168.12.128 bridge-192.168.124.128 VM2(client):bridge-192.168.124.129 在VMw ...

  10. Python3利用Dlib19.7实现摄像头人脸识别的方法

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建 ...