题目链接: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. C#中使用Log4Net记录日志

    https://www.cnblogs.com/W--Jing/p/8125652.html 实例参考 https://www.cnblogs.com/soundcode/p/4866078.html ...

  2. SQL 事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

  3. order by 和group by同时使用

  4. 2806 红与黑 个人博客:doubleq.win

    个人博客:doubleq.win 2806 红与黑  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 白银 Silver 题解  查看运行结果     题目描述 Descripti ...

  5. Linux VPS主机利用Crontab实现定时重启任务

    第一.安装Crontab可执行环境 一般的VPS/服务器是支持的,但是有些可能没有支持就需要我们来给予安装. A - centos系统 #安装Crontab yum install vixie-cro ...

  6. CAD增强属性块的还原(转)

    来自:http://blog.3snews.net/space.php?uid=13924959&do=blog&id=70174 作者:毛毛虫 Demo下载:CAD增强属性块的还原 ...

  7. python判断一个数字是整数还是浮点数&判断整除

    判断整数还是浮点数   >>> a=123 >>> b=123.123 >>> isinstance(a,int) True >>&g ...

  8. MUI框架-02-注意事项-适用场景-实现页面间传值

    MUI框架-02-注意事项-适用场景-实现页面间传值 关于开发,我拷贝太多也没什么意义,就请查阅:官方文档:http://dev.dcloud.net.cn/mui/ui/ 快速入门 - 注意事项 有 ...

  9. C# 串口

    /// <summary>        /// 串口初始化         /// </summary>        private void OpenSerialPort ...

  10. mvn install 时候报GBK编码错误解决办法

    在pom.xml里面 <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding>UTF-</p ...