题目链接: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
异或满足交换律,结合律任何数X^X=0,X^0=X自反性 A XOR B XOR B = A xor 0 = A设有A,B两个变量,存储的值分别为a,b,则以下三行表达式将互换他们的值 表达式 (值) :A=A XOR B (a XOR b)B=B XOR A (b XOR a XOR b = a)...
分类:
其他好文 时间:
2015-04-08 10:51:53
阅读次数:
138
题意:通过他给的代码,跑出 n个数a【i】。 然后取任意多个连续的数,让他们 异或操作。 计算有多少种取法,使操作后结果为0.
做法:连续就想到了前缀和。 把前i个a的异或操作结果放在 num[i]中, 那么a【i】到a【j】个数的异或结果就是 num[j]^num[i-1]。 还有num【i】自身代表了开头到a【i】这些数的异或结果。
然后只要计算有多少num【i】为0,以及多少 num[j]^num[i-1] 为0就行了。再把总方案数 c(n,2)减去为0的个数,就是答案了。但是普通...
分类:
其他好文 时间:
2015-04-07 21:44:43
阅读次数:
231
题目:http://hzwer.com/1976.html分析:先Orz hzwer对于盒子外面的巧克力棒,就是Nim游戏。所以就很容易想到先手第一步最好从盒子中取出m根巧克力棒,使得这些巧克力棒的异或和为0,并且盒子中剩余的巧克力棒无论如何取出来都不能得到异或和为0(其实m就是所有巧克力棒的最长异...
分类:
其他好文 时间:
2015-04-07 00:28:19
阅读次数:
161
【题意】
给定序列q[1..n],求任意两数异或的最大值
数据范围:1
【分析】Trie用来从高到低保存0和1,然后爆搜:尽可能凑1,不然凑0
【代码】
WOC为什么是多组数据?
#include
#include
#include
using namespace std;
const int K=32;
const int L=3300000;
typedef long...
分类:
其他好文 时间:
2015-04-06 23:16:51
阅读次数:
178
最近看了刘汝佳写的算法入门经典 感觉自己的基础实在太烂了 所以总结了一些我们比较容易犯的错误给大家看看(大牛就不要看了O(∩_∩)O)1.浮点数:两个整数计算的是浮点数的时候一定要把整数先化为浮点数 5-0.1计算机先把5变5.0之后再进行计算的2.异或运算:这个是个很神秘的东西如果要在一个数组中找...
分类:
编程语言 时间:
2015-04-06 20:14:05
阅读次数:
146
#include "stdafx.h"void temp(int *l,int i,int j){ l[i]=l[i]^l[j]; l[j]=l[i]^l[j]; l[i]=l[i]^l[j];}//使用异或有个问题,当i和j相等时,不能实现交换的目的void HeapSort_M...
分类:
编程语言 时间:
2015-04-05 23:08:11
阅读次数:
205
中文题
直接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
好好的利用异或可以产生神奇的效果。
异或运算的性质:
任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的数字全部在异或中抵消掉了。
例题:
给定大小是N的数组,数组里的元素互相不重复,元素的大小范围是1~(N+1),目标是找出第一个miss的数。要求时间复杂度O(N),空间是O(1)....
分类:
编程语言 时间:
2015-04-02 16:29:18
阅读次数:
200