题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4876
题意:给你N,l,k三个数,N代表N个数,从中任选k个数,然后
这k个数组成一个环,可以从这个环中选连续的1-k个数进行异或和
,把所得到的值填充到l的后面,使得有一个数r让l-r之间所有的整
整数都被这些异或和填满,求最大的r,也许表达的不太清楚,其实
就是找一个最大的r,使得给定的...
分类:
其他好文 时间:
2015-05-07 22:13:48
阅读次数:
149
题意:有n堆火柴,选择连续若干堆火柴进行Nim游戏,求让先手胜的选择方案数。思路:让先手胜等同于这些数的异或值不同于0,不妨转化为求让先手败的方案数。此时记录一个前缀的异或和val[i],那么答案就是count({i,j})(0 4 #include 5 #include 6 #inclu...
分类:
其他好文 时间:
2015-05-06 06:51:16
阅读次数:
153
树上的操作3282 Tree删边, 连边, 单点修改, 询问路径异或和。1984: 月下“毛景树”路径覆盖, 路径增加, 询问路径 max简单树剖3306: 树要支持 换根, 修改点权, 查询子树最小值不换根就是简单的dfs序线段树, 换根的话只需要知道当前根与查询的点的关系:如果查询点是根的儿子,...
分类:
其他好文 时间:
2015-04-22 21:57:05
阅读次数:
140
考虑到Bouton定理的证明过程,设n个数的Nim和(异或和)为X,其最高位的1在第k位,那么n个数中一定有个y的第k为也是个1.将y的数量变为X xor y,那么n的数的Nim和为0,便转为先手必败局面。所以先手有多少种取法,就看n个数里面有多少个y,满足二进制的第k为是个1。 1 #includ...
分类:
编程语言 时间:
2015-04-11 20:37:06
阅读次数:
189
这是由n个巴什博奕的游戏合成的组合游戏。对于一个有m个石子,每次至多取l个的巴什博奕,这个状态的SG函数值为m % (l + 1)。然后根据SG定理,合成游戏的SG函数就是各个子游戏SG函数值的异或和。 1 #include 2 3 int main() 4 { 5 int T, n; ...
分类:
其他好文 时间:
2015-04-11 16:07:34
阅读次数:
109
yougth和他的朋友们
时间限制:10000 ms | 内存限制:65535 KB
难度:3
描述yougth的朋友们各自有一个魔法值x,现在yougth想从这些朋友中挑出一些,使得这些朋友的魔法值的异或和大于等于m。这样的组合共有多少种?
输入多组数据
每组数据首先两个数n和m,表示朋友的个数和要大于等于的值,((1 ≤ n ≤ 40, 0 ≤ m ≤...
分类:
编程语言 时间:
2015-04-11 11:49:28
阅读次数:
203
题意:
给n个数,然后每次可以选择一对尚存活的数,将其异或和加和到答案中,然后删掉其中一个数,直到只剩一个数为止。
题解:
花样教人理解最小生成树,一片苦心啊,不会最小生成树的可以从这开始理解2333。
对了,数据范围有点大,完全图 kruscalkruscal 多个 log log 估计过不去。
代码:
#include
#include
#include
#include...
分类:
其他好文 时间:
2015-04-09 17:35:15
阅读次数:
173
题目链接:ZOJ 3591 Nim
题意:根据题目给出的代码得到n堆石头的各自的数量,求先手选出连续的若干堆并且必胜的方法数。(比如:3,1,1 每堆石头数是1,1,1.先手选出(1),(1),(1),(1,1,1) 这四种方案是必胜的,所以答案是4)
思路:在n堆取石头首先想到的是Nim博弈,连续的若干堆,即求连续子序列异或和为0的数量m,n*(n+1)/2-m就是答案
(Nim博弈结论,...
分类:
其他好文 时间:
2015-04-09 09:03:59
阅读次数:
136
题目:http://hzwer.com/1976.html分析:先Orz hzwer对于盒子外面的巧克力棒,就是Nim游戏。所以就很容易想到先手第一步最好从盒子中取出m根巧克力棒,使得这些巧克力棒的异或和为0,并且盒子中剩余的巧克力棒无论如何取出来都不能得到异或和为0(其实m就是所有巧克力棒的最长异...
分类:
其他好文 时间:
2015-04-07 00:28:19
阅读次数:
161
中文题
直接dfs下去即可,遇到重复访问的点,判断一下该环三部分异或和是否大于0
代码:
#include
#include
#include
using namespace std;
const int N = 100005;
const int M = 400005;
int n, m;
struct Edge {
int u, v, w;
Edge() {}
...
分类:
其他好文 时间:
2015-04-02 21:02:15
阅读次数:
128