P4301 [CQOI2013] 新Nim游戏

题目:

在传统的Nim游戏基础上加一步,在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴。可以一堆都不拿,但不可以全部拿走。第二回合也一样,第二个游戏者也有这样一次机会。从第三个回合(又轮到第一个游戏者)开始,规则和 Nim 游戏一样。

题解:

传统的Nim游戏策略:非空石子数量xor和等于0,则必败
A的目的是:不论B怎么拿,都无法剩下一个xor和等于0的子集。也就是A拿完后剩下一个线性基即可,因为线性基是线性无关的,肯定不为0,题目又要求A拿走尽量少的石头,先按照从大->小排序,求最大的线性基

代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=1030;
ll a[maxn];
int L=60;
ll c[maxn];
bool insert(ll x){for(int j=L;j>=0;--j){//从最高位开始看if((x&(1ll<<j))==0) continue;if(a[j]){//若如主元j已经存在,用a[j]消去x的第j位然后继续x ^= a[j];continue;}   //让x当主元j,需要先用第k(k<j)个主元消去x的第k位for(int k=j-1;k>=0;k--){if(x & (1ll<<k)) x ^= a[k];}//接着用x去消掉第k(k>j)个主元的第j位for(int k=L;k>j;k--){if(a[k] & (1ll<<j)) a[k] ^= x;}a[j] = x;return 1; }return 0;
}
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>c[i];}sort(c+1,c+1+n,greater<int>());ll ans=0;for(int i=1;i<=n;i++){bool w=insert(c[i]);if(w==0){ans+=c[i];}}if(ans==0)cout<<-1<<endl;else cout<<ans;
}

P4301 [CQOI2013] 新Nim游戏相关推荐

  1. 洛谷P4301 [CQOI2013]新Nim游戏

    洛谷P4301 [CQOI2013]新Nim游戏 题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火 ...

  2. BZOJ 3105:[cqoi2013]新Nim游戏

    BZOJ 3105:[cqoi2013]新Nim游戏 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题目大意:在传统的Nim取石子 ...

  3. 拟阵:贪心原理(bzoj 3105: [cqoi2013]新Nim游戏)

    拟阵:贪心算法的理论基础 拟阵是满足下列条件的一个序队M = (S, I) ①S是一个有穷的集合,I是集合的集合且非空 ②I具有遗传性质:如果集合B∈I 且 A⊂B,则A∈I,即若B∈I,则B是S的独 ...

  4. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  5. 【bzoj3105】新Nim游戏

    Portal--> bzoj3105 新Nim游戏 Solution 转化一下问题 首先看一下原来的Nim游戏,先手必胜的条件是:每堆数量的异或和不为\(0\) 所以在新的游戏中,如果要保证自己 ...

  6. 【BZOJ3105】新Nim游戏,线性基+贪心

    Time:2016.09.08 Author:xiaoyimi 转载注明出处谢谢 思路: 思路题 看似简单,但是使用的知识还是很有意思(sang bing)的 首先就是关于Nim游戏 总之就是第一次取 ...

  7. P4301-[CQOI2013]新Nim游戏【线性基】

    正题 题目链接:https://www.luogu.com.cn/problem/P4301 题目大意 nnn个石头,先手先取走若干堆(不能全取,可以不取),后手取走若干堆(不能全取,可以不取).然后 ...

  8. 2017.9.23 新Nim游戏 失败总结

    既然双方第一轮的操作都相同,那就相当于第一个人留下的石子堆之间无论怎么组合都不会出现异或==0的情况 一开始猜了一个错的结论,去重+最小,,然而秒wa,样例太水 然后就考虑如何让剩下的集合尽量大,且不 ...

  9. 博弈论(Nim游戏、有向图游戏之SG函数)

    这里写目录标题 经典NIM游戏 Nim游戏属于公平组合游戏ICG 有向图游戏(SG函数) Mex运算 SG函数 单个有向图(一堆石子) 求SG值(记忆化递归) 有向图游戏的和 ,(多个有向图(多堆石子 ...

最新文章

  1. 用Python从零开始创建区块链
  2. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
  3. 字符用_连接的是什么加密_防水连接器外壳与铜针表面涂层有什么用?
  4. 织梦CMS内核宝宝算命取名企业模板
  5. 【英语学习】【English L06】U03 House L1 What type of apartment do you want to rent?
  6. WebLogic—发布Web项目
  7. 电影图标:杀死比尔(Kil Bill)
  8. Win10家庭版开启远程桌面
  9. 机器人系统设计及控制技术附加学习资料
  10. 计算机四级考试全国通过率,大学英语四级多少分算过 通过率是多少
  11. Nagios XI网络监控软件安装
  12. 图解RAM结构与原理,系统内存的Channel、Chip与Bank
  13. 已解决:Component should be written as a pure functioneslintreact/prefer-stateless-fun报错
  14. 百度智能云携手鄂尔多斯市:大数据赋能,让房子有了身份证会说话
  15. i7 9750h和r7 5800h差距大不大
  16. 【Linux】IRQ
  17. i2c-tool调试工具使用方法介绍
  18. kingcms php 漏洞,kingcms5.0/5.1漏洞
  19. Java kafka监控 topic的数据量count情况,每个topic的Summed Recent Offsets(总结最近的偏移量)
  20. python科学计算—— numpy

热门文章

  1. 全球科技界最鼓舞人心领袖揭晓!马斯克第一,马云第五
  2. 每日一笑 | 最真实的商业模式
  3. 比乐高还要好玩,50种奇妙装置玩法,将STEM教育一网打尽
  4. 【10.29周一电商,已好】中国日历的至高境界,377张震撼级插画,美到爆!
  5. 50张神图……好不容易才找到完整版!
  6. Java类集-SortedSet接口
  7. oracle怎么删除lob对象,Oracle系列:LOB大对象处理
  8. java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?
  9. qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...
  10. 小学计算机课教学设计,小学信息技术教学设计三篇