上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 29 下一页
摘要: 学了三种简单博弈(前一篇)之后,我又在这篇博文这学了HDU1907的解法下面说下我的理解,有些借鉴原博文。这题和下面的题有点相似,但是又不一样也就是说把最后取完的定为输家改成,最后取完的定为赢家。后面的这个要简单一点,下面是简单分析,先来看这个简单的首先我们用T表示当前状态的所有火柴数异或为0,否则极为S。1.S可以转化成T我们设一共有n堆火柴,每堆有k(i)根.那么S态中k(1)^k(2)^……^k(n) != 0,这个值我们记为c那么肯定有某个k(i)的最高位和c的最高位同为1,不然c的最高位变成了0假设这个最高位和c的最高位同为1的是第m堆,这样我们可以得到x = k(m)^c < 阅读全文
posted @ 2012-07-25 22:55 cchun 阅读(743) 评论(1) 推荐(0) 编辑
摘要: 先看费马小定理: 费马小定理是数论中的一个重要定理,其内容为: 假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p) 假如p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1逆元:设m为正整数,a为正整数,如果存在a' 使得:a X a' = 1(mod m)a'叫做a的逆元。密码学中用到了这个结论。RSA.证明:x^(MOD-1) = 1 (mod MOD)x*x^(MOD-2) = 1 (mod MOD) x^(MOD-2)为其逆元其中MOD 为素数 , x要小于MOD,如果x>=MOD,可以先对x取MOD,这不会影响结果。 阅读全文
posted @ 2012-07-25 13:06 cchun 阅读(299) 评论(0) 推荐(0) 编辑
摘要: /**State 0MS 364K 1978 B C++*题目大意:* 给定n堆牌,一开始每一堆牌有n张,然后有两种操作,一种是L翻转,一种* 是R翻转,L翻转是将最左边的那一堆全部翻转贴到最接近的右边那一堆的* 上方,R翻转类似,然后要求最后只剩下一堆的时候,各个牌的状态。*解题思路:* 直接用栈来模拟牌的翻转即可,一开始设置n个栈,然后用两个变量来指向* 最左边那一堆跟最右边那一堆,直到最后两个变量均指向同一堆,操作结束。*题目考点:* 比较基础,但稍微有一点点猥琐的模拟题。*/View ... 阅读全文
posted @ 2012-07-25 10:10 cchun 阅读(449) 评论(0) 推荐(0) 编辑
摘要: /**Time: 93ms*题目大意:* 求i+(i+1)+(i+2)的结果对于有没有进位,没有进位的称为Simple Addition Expression* 给定一个n,求i < n有多少个数可以称为simple Addition Expression.*解题思路:* 总共有786432个符合要求的数据。所以可以用暴力。* 求出所有的满足的simple Addition Expression的数。之后用二分查找位置即可。*/View Code 1 #include <iostream> 2 #include <algorithm... 阅读全文
posted @ 2012-07-24 13:49 cchun 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 一、判断值是否存在: binary_search()bool binary_search(ForwardIterator first, ForwardIterator last, const LessThanComparable& value); bool binary_search(ForwardIterator first, ForwardIteratorlast, const T& value, StrictWeakOrdering comp); 在[first,last)中查找value,如果找到返回Ture,否则返回False 二分检索,复杂度O(log(last-f 阅读全文
posted @ 2012-07-24 09:48 cchun 阅读(3014) 评论(0) 推荐(0) 编辑
摘要: 很多地方用到模运算,这里说明模运算的一些规律,并加以证明。 后续会对这些理论实际的应用加以记录和说明。1. 模运算是取余运算(记做 % 或者 mod),具有周期性的特点。m%n的意思是n除m后的余数, 当m递增时m%n呈现周期性特点, 并且n越大,周期越长,周期等于n。例如0 % 20 = 0,1 % 20 = 1, 2 % 20 = 2, 3 % 20 = 3, ..., 19 % 20= 1920 % 20 = 0,21 % 20 = 1,22 % 20 = 2,23 % 20 = 3, ...,39 % 20 = 192. 如果m %n = r,那么可以推出如下等式m = k * n + 阅读全文
posted @ 2012-07-22 12:29 cchun 阅读(228) 评论(0) 推荐(0) 编辑
摘要: /**Time: 0 ms*题目大意:* 输入m, n(n < 1000000000),求1~n之间中gcd(x, n) >=m 的x个数。*解题思路:* 找出N的所有大于等于M的因子(x1,x2,x3.....xi),然后设k=N/xi;* 下面只需找出小于k且与k互质的数。* 因为:设y与k互质且小于k,那么gcd(y*xi,k*xi)=xi;* (xi为N的因子,且xi大于等于M)。*/View Code 1 #include <iostream> 2 #include <algorithm> 3 #include ... 阅读全文
posted @ 2012-07-19 02:03 cchun 阅读(868) 评论(0) 推荐(1) 编辑
摘要: /**Time: 0 ms*题目大意:* 求1~n里面比n小,但是与n不互素的数的总和。*解题思路:* 利用欧拉函数即可求解,1~n比n小且与n互素的数的总和为* sum(n) = n * phi(n) / 2;那么可以先求出1~n-1的总和,然后* 减去sum(n)即可。*/View Code 1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 int jisuan(int x) 6 { 7 int i,res=x; 8 for(i=... 阅读全文
posted @ 2012-07-18 23:22 cchun 阅读(1271) 评论(0) 推荐(0) 编辑
摘要: /**Time: 156 ms, 但是当我把求素因子拆出来的时候,居然600ms*题目大意:* 求二次剩余,求雅克比符号,然后根据性质把雅克比符号转换为勒让德符号。* 注意判断勒让德符号的结果,可以用欧拉准则,L(a, n),当 n|a时,结果为0,* 否则用a^((n - 1) / 2) mod n来求。(欧拉函数的适用范围是当n为奇素数)*解题思路:* 直接用欧拉准则来模拟即可。不需要管题目的一大堆性质,注意提取题目有用的信息。*题目困惑:* 当用J(a, n)中的n不是素数要装换为 J (a, n) = J (a, p... 阅读全文
posted @ 2012-07-18 22:22 cchun 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给出一个N,求1..N中与N互质的数的和if gcd(n,i)=1 then gcd(n,n-i)=1 (1<=i<=n)反证法: 如果存在K!=1使gcd(n,n-i)=k,那么(n-i)%k==0 而n%k=0 那么必须保证i%k=0 k是n的因子,如果i%k=0那么gcd(n,i)=k,矛盾出现; 于是问题变的非常简单: ANS=N*phi(N)/2 i,n-i总是成对出现,并且和是n 于是可能就有人问了,如果存在n-i=i那不是重复计算? 答案是不会 因为: n=2*i->i=n/2 1.如果n是奇数,那么n!=2*i,自然也不存在n-i=i和重复计算之说 阅读全文
posted @ 2012-07-16 17:52 cchun 阅读(1576) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 29 下一页