bzoj 3105: [cqoi2013]新Nim游戏 异或高消 && 拟阵
3105: [cqoi2013]新Nim游戏
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 535 Solved: 317
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
5 5 6 6 5 5
Sample Output
HINT
k<=100
才学了拟阵,然后现学现用,居然就发现了这么一道拟阵好题。
题目简化出来大概是你要在一堆数集中,删除一些数,使得剩下的数不可能组成异或和为0的非空集合,并且使删除的数尽量的小。考虑依次加数,每次加完异或高消一次,如果发现线性相关,那么就不加入这个数,否则加入。这样可以满足删除的数的个数尽量小。
然而题目中求得是删除的数字的和,怎么办?注意到这道题所说的“子集异或和非0集合”其实就是一个拟阵。【拟阵(E,I)1.空集满足 2.若集合A满足,则A子集满足“子集异或和非0” 3.若card(A)>card(B),存在x属于A,且B+{x}属于I,这个可以用异或高消来理解】所以按照拟阵的标准贪心思路,将读入的数列从大到小排一遍序就ok了。
发现以前写的异或高消都有bug,整个人都splay起来了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 100000
typedef long long qword;
int lst[MAXN];
inline bool cc(int x,int y)
{
for (int i=;i>=;i--)
if (x&(<<i))
return y&(<<i);
} int main()
{
freopen("input.txt","r",stdin);
int n;
scanf("%d",&n);
for (int i=;i<n;i++)
scanf("%d",lst+i);
sort(lst,lst+n,greater<int>());
qword ans=;
int x,y;
for (int i=;i<n;i++)
{
x=lst[i];
for (int j=;j<i;j++)
{
if (cc(lst[j],lst[i]))
lst[i]^=lst[j];
}
if (!lst[i])
ans+=x;
}
printf("%lld\n",ans);
}
bzoj 3105: [cqoi2013]新Nim游戏 异或高消 && 拟阵的更多相关文章
- BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基
[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...
- bzoj 3105: [cqoi2013]新Nim游戏【线性基+贪心】
nim游戏的先手必胜条件是所有堆的火柴个数异或和为0,也就是找一个剩下火柴堆数没有异或和为0的子集的方案,且这个方案保证剩下的火柴个数总和最大 然后我就不会了,其实我到现在也不知道拟阵是个什么玩意-- ...
- BZOJ 3105: [cqoi2013]新Nim游戏(线性基)
解题思路 \(nim\)游戏先手必胜的条件是异或和不为\(0\),也就是说第一个人拿走了若干堆后不管第二个人怎么拿都不能将剩余堆的异或和变成\(0\).考虑线性基,其实就是每个数对线性基都有贡献,任何 ...
- BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]
以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高 ...
- BZOJ 3105: [cqoi2013]新Nim游戏
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题意是要取一些数使得剩余的数xor和的子集不为0 拟阵.求解极大线性无关组.贪心从大到小 ...
- BZOJ.3105.[CQOI2013]新Nim游戏(线性基 贪心 博弈论)
题目链接 如果后手想要胜利,那么在后手第一次取完石子后 可以使石子数异或和为0.那所有数异或和为0的线性基长啥样呢,不知道.. 往前想,后手可以取走某些石子使得剩下石子异或和为0,那不就是存在异或和为 ...
- 【BZOJ】3105: [cqoi2013]新Nim游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题意:k堆火柴,先手和后手在第一次拿的时候都能拿若干整堆火柴(但不能拿完),之后和nim游戏规 ...
- 3105: [cqoi2013]新Nim游戏
貌似一道经典题 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿走.第二回合也一样,第二个游戏者也有这样一次机会.从第三个回合(又轮到第一个游戏者)开始,规则和 ...
- BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基
一个原来写的题. 既然最后是nim游戏,且玩家是先手,则希望第二回合结束后是一个异或和不为0的局面,这样才能必胜. 所以思考一下我们要在第一回合留下线性基 然后就是求线性基,因为要取走的最少,所以排一 ...
随机推荐
- linux__升级java版本
java下载地址:http://www.oracle.com/index.html 使用which java查看到,Java的环境变量指向的还是/usr/bin/java,问题找到了.于是就进行了下面 ...
- Oracle删除重复数据的几种常用方法
1.有可区分的主键,其他数据相同 select * from 表名 dl where dl.id not in (select min(d.id) from 表名 d group by 重复列) 2 ...
- 可发布指定的ASP.NET页面的插件:LimusicAddin
涉及到的技术点 VS插件开发.推荐阅读:Visual Studio 2008 可扩展性开发 asp.net 预编译.使用aspnet_comlier.exe(在目录:C:\Windows\Micros ...
- Oracle学习第一天---安装和基础入门
国庆七天假,决定静下心来入门Oracle数据库. 环境:Ocacle 11g 软件安装包和安装图解,大家可以在我的百度网盘上下载:链接:http://pan.baidu.com/s/1ntjDEnZ ...
- 第十三篇、jQuery Mobile
API-->搜索data 0.page data-transition="slide" // 页面切换效果 data-position="fixed" / ...
- 关于Ionic的安装
Ionic是一个前端的框架,帮助开发者使用HTML5, CSS3和JavaScript做出原生应用. http://ionicframework.com/getting-started/ 这里介绍了如 ...
- 11_Servlet的一些细节知识点
[Servlet的细节知识点1-----一个Servlet映射到多个URL] 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servl ...
- Eclipse代码自动提示
发现了一个好用的快捷键,不用跳转到源文件就可以看源代码:先按shift键,然后鼠标点击要看的代码,即可.
- Linux C 程序 基础语法(1)
1.Linux 下第一支C程序,控制台打印一句话. vi first.c //linux新建文件 #include<stdio.h> int main() { printf("w ...
- 1. Window环境下 - 开发环境的配置: (安装Android Studio 2.1)
0. Java简介: 1990年Sun公司预料嵌入式系统将在未来家用电器领域大显生手, 于是成立了一个由James Gosling领导的"Green计划"(首席科学家Bill Jo ...