UVA 10710 - Chinese Shuffle

题目链接

题意:给定n张牌,完美洗牌n - 1次,问是否会变回原来的序列

思路:完美洗牌:

如果有a1a2a3...anb1b2b3...bn的牌,设每张牌原来的位置为x,那么完美洗牌一次后。前n张牌分别到2 x位置,后n张分别到1, 3, 5..也就是2
x % (2 n + 1)的位置,因此每张牌位置变为2 x % (2 * n + 1).这样去推断每张牌是否到原位就能够得出答案了。可是牌非常多的情况根本无法推断。那怎么办呢?

事实上仅仅要推断第一张就能够了,证明:

如果完美洗牌p次,那么第一张牌位置为1 2^p % (2 n + 1) = 1,那么第x张牌的位置为x
2^p % (2 n + 1) = x就得得证了。

在来考虑这题。这题给定的完美洗牌方式,那么事实上对于偶数就能够看成奇数的情况(由于第一张始终不变),然后和上面一样去推一下位置变化,最后得到每张牌的位置为x * 2^(n - 1) % n,这样一来带入1,问题就变成了推断2 ^ (n - 1) % n == 1,用高速幂就可以

代码:

#include <stdio.h>
#include <string.h> long long n; long long pow_mod(long long x, long long k, long long mod) {
if (k == 0) return 1;
long long ans = pow_mod(x * x % mod, k>>1, mod);
if (k&1) ans = ans * x % mod;
return ans;
} int main() {
while (~scanf("%lld", &n) && n != -1) {
if (pow_mod(2, n - 1, n) == 1)
printf("%d is a Jimmy-number\n", n);
else
printf("%d is not a Jimmy-number\n", n);
}
return 0;
}

10710 - Chinese Shuffle(数论+完美洗牌)的更多相关文章

  1. uva 10710 - Chinese Shuffle(完美洗牌)

    option=com_onlinejudge&Itemid=8&category=474&page=show_problem&problem=1651"> ...

  2. [转]完美洗牌(Perfect Shuffle)问题

    [转]原博文地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.09.md ...

  3. 完美洗牌&洗牌

    完美洗牌问题,给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,把它最终设置为b1,a1,b2,a2,...bn,an这样的. O(n)的算法,O(n)的空间. 对于前n个数,映射为 ...

  4. 算法笔记_128:完美洗牌算法(Java)

    目录 1 问题描述 2 解决方案 2.1位置置换算法 2.2 走环算法   1 问题描述 有一个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后变成{a1 ...

  5. Java实现完美洗牌算法

    1 问题描述 有一个长度为2n的数组{a1,a2,a3,-,an,b1,b2,b3,-,bn},希望排序后变成{a1,b1,a2,b2,a3,b3,-,an,bn},请考虑有没有时间复杂度为O(n)而 ...

  6. 519. Random Flip Matrix(Fisher-Yates洗牌算法)

    1. 问题 给定一个全零矩阵的行和列,实现flip函数随机把一个0变成1并返回索引,实现rest函数将所有数归零. 2. 思路 拒绝采样 (1)先计算矩阵的元素个数(行乘以列),记作n,那么[0, n ...

  7. 实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)

    实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例) 1.namedtuple:命名元组,可以创建一个没有方法只有属性的类 from collections import namedtup ...

  8. python 练习洗牌

    生成随机数需要引入random模块,学习下random模块中常用的几个函数: random.random() 用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.un ...

  9. BZOJ 1965: [Ahoi2005]SHUFFLE 洗牌( 数论 )

    对于第x个数, 下一轮它会到位置p. 当x<=N/2, p = x*2 当x>N/2, p = x*2%(N+1) 所以p = x*2%(N+1) 设一开始的位置为t, 那么t*2M%(N ...

随机推荐

  1. [Contest20180311]朋友

    是毒瘤的friends呢~ 注意到“产生感情”和后缀自动机的$Right$集合定义很像,所以先对所有串建广义sam,那么一个节点$s$里的所有串都互相产生感情,而从起点走到$s$走最长路所经过的节点里 ...

  2. [Android]Android 布局中如何让图片和文字居中显示?

    图片文字居中显示 **①组件TextView的属性 drawableTop ``` <LinearLayout android:layout_width="match_parent&q ...

  3. 使用eclipse调试MR程序

    1)点击菜单中的“运行按钮”,然后选择调试配置 2) 3) 这里配置输入路径和输出路径,注意在eclipse上只是在单机模式下Hadoop不会使用HDFS,也不会开启任何Hadoop守护进程,所有程序 ...

  4. 【开源类库学习】MBProgressHUD(提示框)

    新博客: http://www.liuchendi.com MBProgressHUD是一个开源类库,实现了各种样式的提示框, 下载地址:https://github.com/jdg/MBProgre ...

  5. css:滑动门

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 降低web服务器压力

    一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...

  7. Jedis(Java+Redis) Pool的使用

    今天试了一下Jedis里连接池JedisPool的的使用.代码如下: package com.myapp.jedis.pooldemo; import redis.clients.jedis.Jedi ...

  8. 小二助手-react.js分块加载

    小二助手在线演示地址:http://118.25.217.253:8000  账号test 密码123 小二助手是用material-ui开发的,感觉国内使用的人数不是特别多,所以创建了一个qq交流群 ...

  9. 面试题:判断两个字符串是否互为回环变位(Circular Rotaion)

    题干:   如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t 的回环变位(circular rotation).   例如,ACTGACG 就是 TGACG ...

  10. 项目笔记:导出Excel功能

    1.前台这块: var ids=""; $.post("${basePath}/assets/unRegDeviceAction_getDeviceIds.do" ...