转_int ,long , long long, __int64类型的范围
摘要:unsigned int 0~4294967295 int 2147483648~2147483647unsigned long 0~4294967295long 2147483648~2147483647long long的最大值:9223372036854775807long long的最小值:-9223372036854775808unsigned long long的最大值:1844674407370955161__int64的最大值:9223372036854775807 (19位)__int64的最小值:-9223372036854775808unsigned __int64的最.
阅读全文
posted @
2012-07-30 17:47
cchun
阅读(1597)
推荐(0)
HDU3032 Nim or not Nim
摘要:/**State: *题目大意:* Alice和Bob轮流取N堆石子,每堆S[i]个,Alice先,* 每一次可以从任意一堆中拿走任意个石子,也可以将* 一堆石子分为两个小堆。先拿完者获胜。(1 ≤ N ≤ 10^6,* 1 ≤ S[i] ≤ 2^31 - 1)*解题思路:* 找sg规律。*解题感想:* 一看数据规模就知道sg不靠谱,应该是规律型的。* 自己用笔模拟了大半天,模拟得蛋疼了之后干脆写成* 代码吧,结果计算机一算就是靠谱些(用笔还模拟错了,* 怪不得一开始没...
阅读全文
posted @
2012-07-29 22:31
cchun
阅读(481)
推荐(2)
HDU3094_A Chess Game_树形删边博弈
摘要:/**State: 3094 156MS 2144K 1315 B C++*题目大意:* 给定n棵树(树中包括简单的多边形),每棵树有m个结点(1~m)和k条边* (结点1给根节点)。Harry和Sally轮流删除树上的一条边,并切移除所* 以和根节点不再连通的所有边和结点。最后不能再删除边的一方为输。*解题思路:* 叶子节点的 SG 值为 0;中间节点的 SG 值为它的所有子节点的 SG 值* 加 1 后的异或和。(加1是因为拆成链的时候,要考虑到链头结点,因为* 算的其实就是链头的结点。...
阅读全文
posted @
2012-07-29 15:55
cchun
阅读(381)
推荐(0)
HDU3595_GG and MM
摘要:/**State: HDU3595 62MS 272K 1262 B C++*题目大意:* 给定两个整数,两人轮流从较大的数中减去较小数的倍数(所有的结果数都非0)。* 直到不能再减者为输。而且有n个游戏同时进行。*解题思路:* 先用gcd来求出谁胜谁负,当第一个出现a % b == 0 || a / b > 2的时候,这轮选* 手就胜利,然后要记录路径,由最后的胜者来根据记录的路径来计算这一局的次数。* 由于是n个游戏同时进行,而且可以走就要走光所有,所以只需记录最长的那一局* 即是...
阅读全文
posted @
2012-07-29 02:09
cchun
阅读(252)
推荐(0)
POJ2425 && HDU1524_ A Chess Game_树形博弈
摘要:/**State: Accepted 8104K 485MS C++ 1428B*题目大意:* 两个人在一个有向五环图上面走棋子,每次只能走一步,最后谁* 没有棋子可走就败,然后棋子可以重叠,并且有n个棋子。要求判断* 先手的胜负。*解题思路:* 一开始没有思路,后来试着用sg去推,推出sg了。*解题感想:* 用了静态邻接表之后,快了,但是此题不明显。* 果然,静态邻接表的边的数目要把握好,RE了两次。*/View Code 1 #include <iostream> 2 #inclu...
阅读全文
posted @
2012-07-28 14:42
cchun
阅读(332)
推荐(0)
HDU1851_A Simple Game_求sg
摘要:/**State: 1851 0MS 268K 862 B C++*题目大意:* (类似)给定n堆石子,然后规定每堆石子只能* 取的个数,然后最先取完者胜,要求判断局势的奇异。*解题思路:* 分别求sg即可。*/#include <iostream>#include <stdio.h>using namespace std;const int MAX = 21;int get_sg(int n, int t){ int sg[MAX], vst[MAX]; for(int i = 0; i < MAX; i++) ...
阅读全文
posted @
2012-07-27 00:56
cchun
阅读(236)
推荐(0)
HDU1536_S-Nim_求sg值
摘要:/**State: 1536 343MS 368K 1164 B C++*题目大意:* 给定一个集合S,然后规定每一堆石头只能取集合S中* 个数,然后要求出所有sg值,并判断结果。*解题思路:* 典型的求sg函数即可求解。*题目困惑:* 题目困惑了好久,最后我把错误排除到了求sg函数上,* 可是还是觉得没有问题,最后还是看了别人的解题报告,* 眼睛一扫,一秒就知道了问题所在。* 其实我一开始就想到了S集合要排序,但是没有细想,就* 过了,结果困扰了我这么久。*...
阅读全文
posted @
2012-07-27 00:09
cchun
阅读(1084)
推荐(0)
HDU1848_Fibonacci again and again_经典的求sg
摘要:/**State: 1848 0MS 320K 994 B C++*题目大意:* 给定3堆棋子,每次可以从每一堆中拿斐波那契个棋子,最后* 先取完者胜,判断该局是否为奇异局势(P或N点);*解题思路:* 典型的求sg函数即可求解。*/#include <iostream>#include <stdio.h>using namespace std;const int MAX = 1024;int sg[MAX];void pre_init(){ int fib[1024]; fib[0] = fib[1] = 1; ...
阅读全文
posted @
2012-07-26 16:30
cchun
阅读(333)
推荐(0)
转_博弈论知识汇总
摘要:转载:http://www.wutianqi.com/?p=1081以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜.
阅读全文
posted @
2012-07-26 15:43
cchun
阅读(244)
推荐(0)
POJ1704_棋盘上的博弈
摘要:/**State: 1704 Accepted 200K 16MS C++ 594B*题目大意:* 一个1*M的棋盘上有N个棋子,初始位置一定,两人轮流操作,* 每次移动一枚棋子,要求只能向左移且至少移动一格,而且不* 能到达或经过以前有棋子的格子,谁无法移动棋子就算输。*解题思路:* 先考虑两个棋子靠在一起的时候,这两对棋子就构成了一个* 奇异局势(P点)。所以可以把题目中的棋子分解为两对两对,* 两对两对之间是不需要考虑什么的。在同一对棋子中,如果对* 手移动前一...
阅读全文
posted @
2012-07-26 15:27
cchun
阅读(1459)
推荐(0)
POJ1067_取石子游戏_威佐夫博弈
摘要:/**State: 1067 Accepted 176K 16MS C++ 435B*题目大意:* 威佐夫博弈*解题思路:* 略。*/#include <iostream>#include <stdio.h>#include <cmath>using namespace std;int main(void){ int big, small; while(scanf("%d %d", &big, &small) == 2) { if(big < small) { big ...
阅读全文
posted @
2012-07-26 15:26
cchun
阅读(347)
推荐(0)
转_博弈论(比较全)
摘要:博弈论(一):Nim游戏重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论,由这个游戏开始了解博弈论恐怕是最合适不过了。Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在
阅读全文
posted @
2012-07-26 15:25
cchun
阅读(908)
推荐(0)
POJ1740_A New Stone Game_推规律的博弈
摘要:/**State: 164K 0MS C++ 1254B*题目大意:* 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,* 第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余* 石子的一部分分给其它的某些堆。最后谁无子可取即输。*解题思路:* 1、先考虑1堆的时候,1堆当然是N点(必胜点),* 2、然后考虑2堆,细想一下可以发现,当2堆一样时,这个时候* 的目的就是要把对方给逼到只有2堆都是1的时候,就能必胜了。* 但是想一下,后手只要模范先手所做的动作,那么...
阅读全文
posted @
2012-07-26 02:59
cchun
阅读(321)
推荐(0)
HDU1907 && HDU2509_Nim博弈变形
摘要:/**题号:1907*State: 15MS 268K 572 B C++*题目大意:* Nim博弈的变形,就是先取完者败。*解题思路:* 如上题。* //必输态 S0(考虑奇偶), T2* //必胜态 S2, S1, T0*/View Code 1 #include <iostream> 2 using namespace std; 3 int main(void) 4 { 5 int cas; 6 scanf("%d", &cas); 7 while(cas--) 8 { 9 ...
阅读全文
posted @
2012-07-25 23:28
cchun
阅读(1122)
推荐(1)
转_HDU_1907&2509 博弈(Nim博弈变形)
摘要:学了三种简单博弈(前一篇)之后,我又在这篇博文这学了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
阅读(763)
推荐(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
阅读(311)
推荐(0)
HDU3328_Flipper_纸牌翻转_模拟题
摘要:/**State 0MS 364K 1978 B C++*题目大意:* 给定n堆牌,一开始每一堆牌有n张,然后有两种操作,一种是L翻转,一种* 是R翻转,L翻转是将最左边的那一堆全部翻转贴到最接近的右边那一堆的* 上方,R翻转类似,然后要求最后只剩下一堆的时候,各个牌的状态。*解题思路:* 直接用栈来模拟牌的翻转即可,一开始设置n个栈,然后用两个变量来指向* 最左边那一堆跟最右边那一堆,直到最后两个变量均指向同一堆,操作结束。*题目考点:* 比较基础,但稍微有一点点猥琐的模拟题。*/View ...
阅读全文
posted @
2012-07-25 10:10
cchun
阅读(459)
推荐(0)
HDU2541_Simple Addition Expression
摘要:/**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
阅读(382)
推荐(0)
STL的二分查找binary_search
摘要:一、判断值是否存在: 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
阅读(3025)
推荐(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
阅读(254)
推荐(0)
HDU2588_大区间_GCD_欧拉函数应用
摘要:/**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
阅读(878)
推荐(1)
HDU3501_calculation2_欧拉函数求和
摘要:/**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
阅读(1283)
推荐(0)
HDU3589_Jacobi symbol_二次剩余
摘要:/**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
阅读(364)
推荐(0)
【转】求小于等于N的与N互质的数的和
摘要:问题描述:给出一个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
阅读(1598)
推荐(0)
HDU3661_assignments_活动分配_贪心
摘要:/**Time: 略*题目大意:给定n个工作,每个工作有分为a, b两种,有n个工人,每个工人* 分配一个a, 一个b, 每个工人工作时间限度为t,超过t要另外支付T-t的金额* 求老板分配的最小额*解题思路:拿到题目就感觉到用贪心,可以自己无法证明,就久久没有入手。* 因为是在计算几何专题里面的。* 目标是要使未能达到t的工人数最少,所以要使每个工人的工作时间尽可能到* 达t,感觉一边升序排列,一边降序排列即可使结果最优,但还是证明不了。* 证明贪心的能力有待加强。*解题感想:水题一道,关键是要看能否看出是水题,最好能证明一下。*/View Code 1 #incl...
阅读全文
posted @
2012-07-16 13:19
cchun
阅读(210)
推荐(0)