第一题:

题目大意:

设 2n 张牌分别标记为 1, 2, ..., n, n+1, ..., 2n,初始时这 2n 张牌按其标号从小到大
排列。经一次洗牌后,原来的排列顺序变成 n+1, 1, n+2, 2, ..., 2n, n。即前 n 张牌被放到
偶数位置 2, 4, ..., 2n,而后 n 张牌被放到奇数位置 1, 3, ..., 2n-1。可以证明对于任何一
个自然数 n,经过若干次洗牌后可恢复初始状态。现在你的的任务是计算对于给定的 n 的值(n≤10^5 ),
最少需要经过多少次洗牌可恢复到初始状态。

解题过程:

1.模拟绝对超时,然后就开始找规律,对于当前位置是x的数,如果x<=n,下一次就会跑到2*x的位置。否则会跑到(2*x-1) mod (2*n)的位置。

2.手工模拟了下,感觉只要一个数回到原位其他数也就回来了,那么取位置1,按照规则不断模拟,知道回到1为止,然后就糊里糊涂AC了。

3.考后怎么也想不明白为什么只要任意取一个数就好,结果TMD 找到了一个反例:n=10的时候;

如果一开始取位置1的数,那么它的位置变化是 1->2->4->8->16->11->1  那么答案就是6。

如果一开始取位置3的数,那么它的位置变化是 3->6->12->3->6->12->3

可以发现第3次洗牌后,位置3的数回到了原位,但是位置1的数还没有,如果一开始选了位置3的数,那么答案就会是3。

难道只要一开始选位置1的数就能AC??

http://tieba.baidu.com/p/3246473319 贴吧大神给了解释。 祝热心的大神rp++。

首先一个位置为x的数,变换一次后,位置变成了 (2*x) mod (2*n+1);

如果初始位置为x的数变换t次后回到原位,那么 有 x * 2^t ≡ x (mod (2n+1)) 下面的证明需要一些同余式的知识。

A:  如果gcd(x,2n+1)= 1 , 则有  2^t1 ≡ 1  ( mod (2n+1) )

B:如果gcd (x, 2n+1)> 1 ,   则有  2^t2 ≡ 1  ( mod (2n+1)/gcd(x,2n+1) );

可以证明 t1 必定是 t2 的倍数,证明如下:(t1,t2都是符合要求的最小的那个)

设 t1=a*t2 + b (0<=b<t2)   ,  (2n+1)/gcd(x,2n+1)=m

A: 2^t2 ≡ 1 (mod m)  -> 2^(a*t2) ≡ 1 (mod m)

B: 2^t1 ≡ 1 (mod (2n+1)) ->  2^(a*t2 + b) ≡ 1 (mod (2n+1)) ->   2^(a*t2 + b) ≡ 1 (mod m)  (因为2n+1是m的倍数);

根据 A,B 可以得到 2^b ≡ 1 (mod m)  ,而 b < t2 因此b=0,否则与前面 “t1,t2都是符合要求的最小的那个”矛盾,因此b=0; 所以 t1= a * t2 , 即 t1 是 t2 的倍数;

而我们要求的最终答案是 所以 t 的最小公倍数 , 因此 x 与 2n+1 互质的时候取得t就是答案,这也就解释了上面为什么取1 就能得到答案 而取 3 就挂掉了。

求解答案只要求 2^t ≡ 1 (mod 2n+1)  的最小解;

首先 phi(2n+1) 是 满足条件的。

那么答案 必定是 2n+1 的约数, 证明 同上 ,把ans看成 t2, 把 phi(2n+1)看成 t1, 那么同理 t1=a*t2 ;

所以 只要 枚举 phi(2n+1)的约数,用快速幂判断是否符合即可。

复杂度进一步从O(ans) 降到了 O(sqrt(n)*log(n));

另外如果只要证明为什么1回到原位,那么所有数都回到原位的话,有个很简单的证明,  设1 经过t次回到 原位 ,那么 1^t ≡ 1 (mod (2n+1)); 两边同时乘一个x,那么有1^t * x ≡ x (mod (2n+1)) ,也就是 其他数也 回到了原位。

第二题:

题目大意:老题了,合并果子。。 复习了下堆水过。

第三题:

题目大意:解数独。

解题过程:

1.dfs爆搜+hash,倒着搜会更快。最慢0.96s,差点挂掉了。见NOIP2009靶形数独,我的解题报告。http://www.cnblogs.com/vb4896/p/3881250.html

2.dancing link,研究ing。。标程所有数据0ms 秒杀啊。

一模 (2) day1的更多相关文章

  1. 二模 (16) day1&day2

    第一题:题目大意: 数列a[0]=a[1]=1, a[n]=a[n-2]*a[n-1]*n,求a[n]的因子个数 mod 1000000007.  n<=1000000 解题过程: 1.递推式还 ...

  2. 一模 (1) day1

    第一题:(水题) 题目大意:求出n个  X% (X是小于等于2位的整数) 的乘积,去掉末尾的0: 解题过程: 1.直接 把整数乘好,然后确定小数点的位置,去掉多余的0 输出即可. 第二题:(搜索题) ...

  3. 二模 (15)day1

    第一题: 题目大意: 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个. 解题过程: 1.这题是刘汝佳<<训练指南>>上的一道经 ...

  4. 二模 (13)day1

    第一题: 题目大意: N个发射站排成一排,求每个发射站左右第一个比它高的发射站. N<=1000000 解题过程: 1.前几天做poj的时候刚好在discuss里看到有一个神奇的东东叫单调栈,正 ...

  5. 二模 (12) day1

    第一题: 题目大意: 求由N个1,M个0组成的排列的个数,要求在排列的任意一个前缀中,1的个数不少于0的个数.N,M<=5000. 解题过程: 1.看到N,M的范围就明确肯定不会是dp,因为起码 ...

  6. 二模 (11) day1

    第一题: 题目大意:用邻接矩阵给出一棵树(边权非负)上N个节点相互之间的最短路距离,求这棵树所有边权的和. 解题过程: 1.暂时还没想出来,待AC. 第二题: 题目大意:给出一些单词,然后建立Trie ...

  7. 二模 (9)day1

    第一题: 题目大意: 给出一个n位01串,要么不动它,要么把它删掉一个字符,要么插入一个字符(0或1),要么把一个1变成0,.使得有1的位置号的总和是n+1的倍数,或者是0. 解题过程: 1.直接枚举 ...

  8. 二模 (10)day1

    第一题: 题目描述: 一个阅览室每天都要接待大批读者.阅览室开门时间是0,关门时间是T.每位读者的到达时间都不一样,并且想要阅读的刊物不超过5本.每位读者心里对自己想看的刊物都有一个排位,到达之后他会 ...

  9. 二模 (8) day1

    第一题: 题目大意: 梦幻城市每年为全市高中生兴办一次运动会.为促使各校同学之间的交流,采用特别的分队方式:每一个学校的同学,必须被均匀分散到各队,使得每一队中该校的人数皆相同.为增加比赛的竞争性,希 ...

  10. 二模 (7) day1

    第一题: 题目大意: 给出数轴上N棵树的坐标和高度,如果两棵树之间的距离小于其中一颗树的高度,那么就有树会被挡住.因此要把一些树砍矮一点.求砍树的总高度最小值. N<=100000; 解题过程: ...

随机推荐

  1. mysql 查询开销

    1.select @@profiling;2.set @@session.profiling=on;3.show profiles;4.show profile for query 2;

  2. Android 自定义对话框

    Android实现自定义对话框效果: 核心代码: package com.example.diydialog; import android.os.Bundle; import android.app ...

  3. LA 5135 Mining Your Own Business

    求出 bcc 后再……根据大白书上的思路即可. 然后我用的是自定义的 stack 类模板: #include<cstdio> #include<cstring> #includ ...

  4. 配置tomcat,java运行环境

    1.下载JDK,安装 官网下载地址:http://java.sun.com/javase/downloads/index.jsp 下载后,安装,选择你想把JDK安装的目录: 比如:JDK安装目录:E: ...

  5. double精度问题,数据范围

    浮点数在计算机中存储方式  http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html 1. double:  1bit(符号位) ...

  6. android打开,保存图片到sd卡,显示图片

    1.打开根目录下test.jpg Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getA ...

  7. 深入理解PHP原理之变量分离/引用

    19 Sep 08 深入理解PHP原理之变量分离/引用(Variables Separation) 作者: Laruence(   ) 本文地址: http://www.laruence.com/20 ...

  8. window下安装nodejs

    下载nodejs 去https://nodejs.org/en/download/下载nodejs,有.mis(安装版)和.exe(二进制版) .mis(安装版) 一般下载这个就行,简单方便,自带np ...

  9. LinuxShell脚本攻略--第一章 小试牛刀

    使用 shell 进行数学运算: #!/bin/bash no1=; no2=; let result=no1+no2 echo $result result=$[ $no1 + no2 ] resu ...

  10. Windows7隐藏字体

    今天突然发现字体Times New Roman消失了,如下图所示: 图1.1 不仅仅Times New Roman,还有System.MS Sans Serif--这些熟悉的字体都消失了,不能选用了! ...