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;
}

最新文章

  1. 背后的故事之 - 快乐的Lambda表达式(二)
  2. 什么是 JSON ?
  3. Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法
  4. ubuntu死机怎么办
  5. oc连接signalr,各种填坑
  6. OD使用心得
  7. html 文件上传框 input标签
  8. Sql server 查询
  9. jQuery中的getter和setter方法
  10. hive集群安装配置
  11. j经常使用ava应用server
  12. UML中关联(Association)和依赖(Dependency)的区别
  13. [js高手之路]Node.js+jade抓取博客所有文章生成静态html文件
  14. 第十三节:HttpHander扩展及应用(自定义扩展名、图片防盗链)
  15. Enterprise Architect
  16. React 学习(四) ---- 生命周期函数
  17. [Ting&#39;s笔记Day3]解决Git常见错误non-fast-forward问题
  18. FTP 其他设置
  19. Spring官网下载各版本jar包
  20. C# 多线程六之Task(任务)二

热门文章

  1. 算法-插入排序(Insertion sorting)
  2. [CF911G]Mass Change Queries
  3. laravel中的事件处理
  4. Linux下Shell脚本替换换行符(转)
  5. netstat 用法
  6. Error: Top-level design entity &quot;dff&quot; is undefined
  7. 【Todo】Nodejs学习计划
  8. android 开发者的个人博客集
  9. nginx 配置优化详解
  10. HTML5 Canvas 绘制库存变化折线 画入库出库柱状图