BZOJ 3105 CQOI 2013 新Nim游戏 && 2460 BeiJing 2011 元素 拟阵+线性基
来源:互联网 发布:装修风格效果图软件 编辑:程序博客网 时间:2024/06/03 22:06
题目大意(新nim游戏):定义一种新的nim游戏,每个人在一开始都有一次机会拿走任意堆的石子或者一个都不拿,问先手必胜时第一次最少取走多少。
思路:正常的nim游戏只要有一个子集的异或和=0那么先手就是必败的。注意到只要过了两个回合之后这个游戏就变成了正常的nim游戏,如果在我们第一次取的时候,如果剩余的所有堆中存在一个子集的异或和=0,那么后手就会让他拿走之后剩下的石子的异或和为0,我们就输了。于是我们就是要求取走最少的石子使得剩下的石子中不存在一个子集使得异或和为0。
判定子集中是否有异或和为0的子集当然是用线性基来搞了,关于拟阵证明的贪心的正确性见:http://blog.csdn.net/wyfcyx_forever/article/details/39477673
剩下的工作就是排序,然后从大到小一次看时候能够加入集合中。
CODE:
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAX 110using namespace std;int cnt;int src[MAX],back_up[MAX];int base[MAX];long long sum;int main(){cin >> cnt;for(int i = 1; i <= cnt; ++i)scanf("%d",&src[i]);sort(src + 1,src + cnt + 1);for(int i = 1; i <= cnt; ++i)sum += (back_up[i] = src[i]);for(int i = cnt; i; --i) {for(int j = 29; ~j; --j)if((src[i] >> j)&1)if(!base[j]) {base[j] = i;break;}elsesrc[i] ^= src[base[j]];if(src[i])sum -= back_up[i];}cout << sum << endl;return 0;}
0 0
- BZOJ 3105 CQOI 2013 新Nim游戏 && 2460 BeiJing 2011 元素 拟阵+线性基
- 【BZOJ 3105】【CQOI 2013】新Nim游戏
- BZOJ 3105 新Nim游戏(博弈论+线性基)
- [高斯消元 线性基 贪心 拟阵] BZOJ 3105 [cqoi2013]新Nim游戏
- bzoj 3105: [cqoi2013]新Nim游戏 博弈论+贪心(拟阵)+线性基
- BZOJ 3105 [cqoi2013]新Nim游戏 拟阵
- BZOJ 3105([cqoi2013]新Nim游戏-拟阵)
- bzoj 3105: [cqoi2013]新Nim游戏 (高斯消元求解线性基)
- 拟阵:贪心原理(bzoj 3105: [cqoi2013]新Nim游戏)
- bzoj3105 新Nim游戏 贪心&线性基
- 【BZOJ3105】新Nim游戏,线性基+贪心
- bzoj3105[cqoi2013]新Nim游戏 线性基
- 【bzoj 3105】: [cqoi2013]新Nim游戏
- BZOJ 3105: [cqoi2013]新Nim游戏
- 【BZOJ 3106】【CQOI 2013】棋盘游戏
- 【BZOJ3105】【cqoi2013】新Nim游戏 线性基神马的
- 【bzoj3105】【cqoi2013】【新Nim游戏】【线性基+贪心】
- BZOJ_P3105 [cqoi2013]新Nim游戏(贪心+线性基)
- ocos2d-x--SEL_CallFuncN,SEL_CallFuncO等的区别
- OERR: ORA-8103 "object no longer exists" Master Note / Troubleshooting, Diagnostic and Solution (Doc
- 15年1月的每天小程序
- 在ubantu下配置LAMP
- [c]链表的建立与一些操作
- BZOJ 3105 CQOI 2013 新Nim游戏 && 2460 BeiJing 2011 元素 拟阵+线性基
- 关于 MFC 的 OnInitialUpDate
- oracle导入导出整理(一)
- 阿里云linux服务器如何创建WordPress站点
- Spring 之注解事务 @Transactional
- github提交代码使用
- cocos3.x之C++11新特性
- 解决:MATLAB_Compiler_Runtime libgfortran.so.3: version `GFORTRAN_1.4' not found
- linux 路由表设置(双网卡)