摘要:
绝好的贪心题把马按照从大到小排序。若田忌的快马比王的快马快,直接赢若田忌的快马比王的快马慢,则用最慢的马和王比若快马相等,则转向慢马。若田忌的慢马比王的慢马快,则赢,指针移位。否则,比较田忌的慢马与王的快马,若相等,直接和。否则,让慢马输给王的快马(只有这种情况)想想,应该是按上面的解答的。这题的贪... 阅读全文
摘要:
很明显地,我们知道,当N=1,2时,先手胜。当N=3时,可以把取走中间一个硬币,得到1,1。依然是先手胜。当N=4时,取走中间两点得到1,1,即先手依然取胜。当N=5时,取走中间1点,依然先手胜。于是,当ALICE取走开头的硬币后,即得到一条链。那么,只需BOB把这条链平均分成两半,做对称操作,即可... 阅读全文
摘要:
这题,通过多次试验,可以发现,当只存在两堆(以下称对)相等的石子时,先手必输。更进一步,当N对这样的石子存在时,先手必输。于是,若1要赢,一种方法是,把石子都变成相等的对。考虑石子中无对的情况,若存在对,我们把那些对忽略,因为先手对于这些对是必输的。当N为奇数时,随机考虑这样的情况(有序)a=(b-... 阅读全文
摘要:
树的删边游戏。。由于题目的特殊性,我们只需计算环的边数值。若为偶环,则直接把环的根节点置0。若为奇环,则留下一条边与根结点相连,并那它们的SG置0;注意的是,两个点也可构成环,因为允许重边。所以,我们只需求点双连通分量,并判断分量中边的数量即可。然后DFS求树的SG值。 1 #include ... 阅读全文
摘要:
关于tarjan 的思想可以在网上搜到,具体我也不太清楚,应该说自己理解也不深,下面是做题经验得到的一些模板。 其中有很多转载,包括BYVoid等,感谢让我转。。。望各路大神愿谅 有向图求连通分量的一般方法: 1 void Tarjan(u) { 2 dfn[u]=low[u]=++index 3 阅读全文
摘要:
博弈题,使用DP来完成。开始时,我以为可以用极大极小加剪枝可以过,但,TLE。。。看过一些题解,没看懂,但也由此有了启发:我们只记录差(初始为0),那为1选的数即为在原差值上加上该数,2选即是减去该数。那么,可以有以下的式子来表达这一过程ANS=A-B+C-D+E-F;神奇的事情来了,将式子转换一下... 阅读全文
摘要:
利用后继节点的SG值求出当前的SG值。在当前任意一个BLANK插入一个x后,分成两段,于是,看成两段的NIM,异或和,按SG的定义求出当前的SG值即可。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 ... 阅读全文
摘要:
对于这道题,我们需要从(A+B)%3==0这式子考虑。对于第一条式子,我们可以知道,只能是奇偶盒子交替转移。由第二条式子可知,要么是同余为0的A,B之间转移,要么是余数为1,2之间的 转移。后来仔细比对发现,同余为0的只能是一条路径(即只能在同余为0之间转移)内。对于1,2之间的转移,恰好是两条路径... 阅读全文
摘要:
阶梯博弈:先借用别人的一幅图片。(1阶梯之前还有一个0阶梯未画出)阶梯博弈的最初定义是这样的:每一个阶梯只能向它的前一个阶梯移动本阶梯的点,直至最后无法移动的为输。那么,利用NIM,只计算奇数级的异或和,当为0时,先手必败。(至于为什么有这样的,我也能说明白,但下文要讨论的是怎么做)。假设这样个NI... 阅读全文
摘要:
翻硬币游戏,纯。。注意要判重 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int a[105],n; 8 9 int sg(int x){10 int tmp=x,cnt=0;11 ... 阅读全文
摘要:
1 //本来写了个和1021相同的HASH,但没过,于是,抱着侥幸的心理,把它变成距离的四次方, 2 //我就呵呵了。。。 3 //这个题,完全靠概率。当然了,如果是把图翻转来比较,也是可以的。但好像很麻烦。。 4 5 #include 6 #include 7 #inclu... 阅读全文
摘要:
报告见代码。。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAX=105; 8 int dir[4][2]={1,0,-1,0,0,1,0,-1}; 9... 阅读全文
摘要:
就是必胜点与必败点的计算而已。计算每一种情况。设st[i][j]为在第i个人剩下j个石头时的情况,拿它转移后的情况比较。可以到达必败点,则当前为必胜点。若只能到达必胜点,则当前点为必败点。 1 #include 2 #include 3 using namespace std; 4 const ... 阅读全文
摘要:
1 #include 2 #include 3 #include 4 using namespace std; 5 int a[30]={-1,1,2,3,-1,1,2,-1,-1,2,2,4,5,5,-1,1,2,6,2,3,-1,1,-1,2,-1,2}; 6 char s[25]; i... 阅读全文
摘要:
也算是一道模板题吧,只需按照SG函数的定义求出每个值的SG,然后异或就可以了。 1 #include 2 #include 3 #include 4 5 using namespace std; 6 const int N=10005; 7 int sg[N]; 8 bool vis[N];... 阅读全文