摘要:
听说有人要计算几何的模板和专题,所以就先写了一个计算几何的专题blog。 概述: 我们首先加入这样的结构体模板:Point,Line,分别代表点和边. Point: 1 struct Point { // 二维点或矢量 2 double x, y; 3 double angle, dis; 4 Po 阅读全文
摘要:
太容易忘记数论的定理了,(也许是比较鶸),所以开了个坑来记一下定理. 1.最大公因数,最小公倍数 gcd(a,b)=gcd(b,a%b) (最大公因数) lcm(a,b)=a*b/gcd(a,b) (最小公倍数) 2.莫比乌斯反演 μ(x)={ 1 (x==1) (-1)^k (x是由k个互不相同的 阅读全文
摘要:
选点问题 Description 陶陶和鹏鹏在玩一个十分有趣的游戏!已知平面上有n个不同的点(保证不存在任意3个点共线),陶陶首先任意选取其中2个不同的点a,b,并连线得到线段AB,之后鹏鹏从剩下的n-2个点中任意选取2个不同的点c,d,并同样连线得到线段CD。 对于陶陶选择的点a,b,鹏鹏可能有若 阅读全文
摘要:
题意:有个一维棋盘,两人轮流下棋,然后谁连成三个谁赢 记得去年fj夏令营有见过这题,但是太弱了, 不会做。 记忆化搜索,如果n<=3肯定先手必胜,递推即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include< 阅读全文
摘要:
题意:n堆石子,两人轮流操作,每次操作只能选定其中一堆,并取走若干个(>=1个)。谁取走最后一个谁输。给定一个状态,问先取的赢还是后取的赢。 整个游戏反过来,如果sg为0先手必胜,不为0必败。(特殊情况:所有堆都是1,这时候奇数堆必胜,偶数必败) 1 #include<iostream> 2 #in 阅读全文
摘要:
题意:对于一个给定的取石子游戏,有多少种先手策略获胜? Ans:若无法获胜,则输出0。 若能获胜我们只要找到一堆石子,使得我们能取它的一部分让总和的异或和变为0。我们先将整个游戏的值异或起来为s 则a[i]^s就是除了第i堆以外的其他所有堆的异或和,如果这个异或和小于a[i],说明我们可以通过取这堆 阅读全文
摘要:
大意:有n堆石子,每堆石子个数已知,两人轮流从中取石子, 每次可取的石子数x满足x属于集合S(k) = {s1,s2,s3...sk-1},问先拿者是否有必胜策略? 裸nim,可以用记忆化搜索。 1 #include<iostream> 2 #include<cstdio> 3 #include<c 阅读全文
摘要:
题意:两个人轮流用2~9来乘n,使n不断扩大,n开始为1。当给一个固定值k,谁先使n超过k谁赢。 分析:能到达必败态的状态为必胜态,只能到达必胜态的状态为必败态。对于给定的k,n>=k时为必败态,所有能到达这些必败态的n为必胜态,这些必胜态中最小的是ceil(k/9.0)。凡是大于它的都可以直接到达 阅读全文
摘要:
题意:有若干个团体,每个团体有若干个元素,他们按次序来排队,如果队列中已经有同一团体的元素在,则可以插队到它后面,模拟这个过程 思路:用map存下元素与团体的关系,并开2个队列,一个存整体队伍的排列(毕竟同一个团体的元素会连在一起),另一个存每个团体内部的排列。 阅读全文
摘要:
题意:给定一棵有向图的树,有些节点上有石子,每次可以取一个石子向一个有向边移动,不能移动者负。 Ans:树上nim,叶子节点nim为0,父亲节点递归儿子得到sg值,答案就是每个石子所在点的sg值异或和。 1 #include<iostream> 2 #include<cstdio> 3 #inclu 阅读全文