自从省赛结束了,好久都做过博弈题了,感觉都快忘了。今天找了几题练练手,在做过程中,感觉这道题挺有意思的。题目的意思是说,在Nim游戏中,先手有几种方式让 Nim 和变为0。(不知道Nim游戏的,请参考:这里)
其实我觉得这道题就是披着博弈的外衣,然后来考查你异或运算符(^)的使用的。在做题之前,我们想要了解异或运算符(^)的一个重要的性质:
现在我们有三个整数a, b, c:
我...
分类:
其他好文 时间:
2015-05-26 09:17:21
阅读次数:
187
题意:给你n 个数 ,让你找出其中有多少组数字 a 异或b 大于max(a, b)
题解:首先了解异或运算的方式 相同为0 不同为1 可以知道如果要增大肯定是要不同的位多于相同的位,其次需要知道 2的n次方等于2的n-1次访加到2的1次访再加1,即最高位影响大于低位之和,也就是说只有某个数字它和其他数字最大位不相同,则异或必然大于max(a,...
分类:
其他好文 时间:
2015-05-22 21:18:58
阅读次数:
130
这题,简单的异或运算。
a ^ b = c => a ^ b ^ a = c ^ a = b。
而这个b就是我们要求解的。
下面的是AC的代码:
#include
#include
using namespace std;
int a[10010];
char b[10010];
int main()
{
int n;
int i, j, k;
while(cin >> n...
分类:
其他好文 时间:
2015-05-22 00:36:04
阅读次数:
106
前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作,需要计算一个校验位。一般情况下,校验位多数是由前几个字节进行异或运算所得。
现在我就先说一下我使用的场景:
把一个16字节的数据写到CPU卡(如交通卡)里面,最后一字节是校验码---前十五字节异或。
我开始从网上找了一些别人写的算法发现计算后结果不对,或者就是写的太复杂了,于是自己就写了一个,感觉也比较简单,现在分享给大家,希望一起交流一下。...
分类:
编程语言 时间:
2015-05-15 13:38:48
阅读次数:
312
异或运算的使用代码: 1 int singleNumber(int* nums, int numsSize) { 2 int i, result = nums[0]; 3 if(numsSize<=0) 4 return 0; 5 f...
分类:
其他好文 时间:
2015-05-11 23:30:18
阅读次数:
215
本来想弄个简单的字符串加密函数,但普通的异或运算可能会导致某些结果位为0或不可见字符,比如当前字符与当前key相同的时候。aes算法之类的感觉相对Base64要麻烦许多(貌似对内容长度不灵活),而且我不需要很强大的加密,变形的Base64已经足够了。顺便学习一下Base64原理。/// Base64...
分类:
其他好文 时间:
2015-05-08 19:47:07
阅读次数:
150
题目描述世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
输入例子:
1999 2299
输出例子:
7题目分析二进制中,统计两个数的相应位(bit)相同可以采用异或操作,异或运算结果相同为0不同为1。所以两个数异或的结果中1就是相同位数。...
分类:
其他好文 时间:
2015-05-08 00:08:33
阅读次数:
274
具体的原理可以直接百度不多说,直接写怎么解决
一、前提:
数据位中仅有一位出错,这是海明码产生的依据
二、异或运算
相同为0,不同为1,异或的符号为“xor”或者“⊕”,例如:1 xor 1 = 0,1 xor 0 = 1
三、基本公式
2^r≥k+r+1
其中r为校验位 ,k为信息位 信息位是已知的
四、具体例子
1、 求(1101)2的海明码
(1...
分类:
其他好文 时间:
2015-05-05 21:49:04
阅读次数:
163
引言 一般这种不能用四则运算的题都只有用位运算来做,目的是加强大家对计算机计算的理解,真是有点扯淡呢 解决问题 首先我们得思考计算机是怎样做加法的呢,比如3加4,如果转换成二进制是0011和0100,加起来是7,也就是0111,相当于是两个二进制的异或运算 但是我们再举一个例子就是4加4,会发现,两...
分类:
编程语言 时间:
2015-05-03 20:32:22
阅读次数:
154
粗糙的给出了分析,最近比较累,以后会改进的。题目中包括三个小的问题,由简单到复杂:1,如果只有一个出现一次,考察到异或的性质,就是如果同一个数字和自己异或的活结果为零,那么循环遍历一遍数组,将数组中的元素全部做异或运算,那么出现两次的数字全部异或掉了,得到的结果就是只出现一次的那个数字。2,如果有两...
分类:
编程语言 时间:
2015-05-01 10:37:06
阅读次数:
186