[高斯消元 线性基 贪心 拟阵] BZOJ 3105 [cqoi2013]新Nim游戏
2016-07-06 17:30
417 查看
第一次拿完后,要使剩下的火柴中不存在异或和为0的子集,且让子集和最大
求线性无关子集算术和最大值
证明是个拟阵 但我不会拟阵
记结论吧...
动态维护线性基啦啦
求线性无关子集算术和最大值
证明是个拟阵 但我不会拟阵
记结论吧...
动态维护线性基啦啦
#include<cstdio> #include<cstdlib> #include<algorithm> #include<functional> using namespace std; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const int N=100005,K=31; int n,a ; int base[K+5]; ll ans; int main() { freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); for (int i=1;i<=n;i++) read(a[i]),ans+=a[i]; sort(a+1,a+n+1,greater<int>()); for (int i=1;i<=n;i++) { int tem=a[i]; for (int p=K;~p;p--) if (a[i]>>p&1) { if (!base[p]){ base[p]=i; break; } else a[i]^=a[base[p]]; } if (a[i]) ans-=tem; } printf("%lld\n",ans); return 0; }
相关文章推荐
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- CSS3之伪元素选择器和伪类选择器
- 图片加载库Glide介绍
- MySQL 复制表结构
- 【转载】cocos2dx 3.1获取系统当前时间
- 无废话WCF入门教程六[一个简单的Demo]
- javascript内置对象Array
- Android MaterialList源码解析
- Canvas_1
- 重写window的原生方法:console
- ANDROID 一键搞定JNI创建C头文件
- prepareStatement与Statement的区别
- 非Spring下的Quartz
- pycharm远程调试报错cant ser remote tunneling
- 堆——神奇的优先队列(下)
- 软件工程课设迭代开发第三天
- Myeclipse 启动tomcat项目报Out of memory: java heap space
- 【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
- Python学习之路(Win7)之Python核心编程
- Understanding LSTM Networks