题目链接
题目类型:高斯消元求解异或方程组
题目来源:BestCoder #16
题目分析
题目大意
Nim的复仇。
Nim博弈的规则,一个人可以从n堆石子中选任意一堆取走至少一个。现在,后手可以移走这n堆中的任意几堆,也可以不移走,要问后手是否能胜?
解析
要想后手胜,则需要使先手达到必败态,nim博弈的性质是,如果所有数的异或和为0,则先手必败,否则先手必胜。那么我们只需要保留一些堆,使这些堆异或为0即可保证先手必败,后手必胜。先看数据范围是10^12,也就是说,最多不会超过2^40次方,我们选取最长宽度也就是MAXN为40即可。当数据大于40时,也必然会有高斯消元之后全为0的行,所以当n>40时,直接认为可以后手赢。当n<40的时候要去算矩阵的秩是否小于未知量的个数,也就是说,自由未知量的个数是否大于0,如果大于零则可以保证能使行阶梯矩阵至少一行为0。
代码
1 |
|