【BZOJ 4347】[POI2016]Nim z utrudnieniem
来源:互联网 发布:c语言 char 编辑:程序博客网 时间:2024/06/11 20:47
今天第一次写blog那就从现在做的第一题开始写吧。。
问题可以转化成取走若干堆使得剩下堆异或和为0。朴素的做法是用
首先优化时间,由于
接下来优化空间,滚动数组无法完全解决空间问题,
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=500005;const int MOD=1000000007;int n,d,A,p,a[N],f[11][1<<20];inline void add(int&x,int y){x=x+y<MOD?x+y:x+y-MOD;}inline void read(int&x){char c;while((c=getchar())<'0'||c>'9');x=c-'0';while((c=getchar())>='0'&&c<='9')x=x*10+c-'0';}int main(){ int i,j,k; scanf("%d%d",&n,&d); for(i=1;i<=n;++i)read(a[i]),A^=a[i]; sort(a+1,a+1+n); f[0][0]=1; for(p=i=1;i<=n;++i){ for(;p<=a[i];p<<=1); for(k=p-1;~k;--k)f[d][k]=0; for(j=d-1;~j;--j)for(k=p-1;~k;--k)add(f[j+1][k^a[i]],f[j][k]); for(k=p-1;~k;--k)add(f[0][k],f[d][k]); } int ans=f[0][A]; if(n%d==0)ans=(ans-1+MOD)%MOD; printf("%d",ans); return 0;}
阅读全文
0 0
- 【BZOJ 4347】[POI2016]Nim z utrudnieniem
- 4347: [POI2016]Nim z utrudnieniem
- 【bzoj 4347】 [POI2016]Nim z utrudnieniem - 博弈论 DP
- bzoj 4347: [POI2016]Nim z utrudnieniem. dp 优化
- bzoj 4347: [POI2016]Nim z utrudnieniem 博弈论+动态规划
- [BZOJ]4347: [POI2016]Nim z utrudnieniem DP+SG函数
- 【POI2016】【BZOJ4347】Nim z utrudnieniem
- BZOJ4347 [POI2016]Nim z utrudnieniem
- BZOJ4347: [POI2016]Nim z utrudnieniem
- 【DP】BZOJ4347[POI2016]Nim z utrudnieniem
- 【DP】BZOJ4347[POI2016]Nim z utrudnieniem
- bzoj4347 Nim z utrudnieniem 动态规划
- bzoj 4345: [POI2016]Korale
- bzoj 4346: [POI2016]Nadajniki 树形动规
- bzoj 4345: [POI2016]Korale 优先队列&dfs
- BZOJ 2819 Nim 树链剖分
- 【BZOJ 2819】 Nim
- BZOJ 2819 Nim 树链剖分
- JAVA学习笔记
- JS异步加载方案
- 进程通信 详解
- 多线程小例子
- 找出mysql中的慢语句
- 【BZOJ 4347】[POI2016]Nim z utrudnieniem
- SAS中intck函数计算日期天数间隔等妙用
- golang huffman
- 阿里云设置远程连接reids
- 从零开始前端学习[13]:伪类选择器
- 7.排序、聚合函数、分组查询
- angularjs速成学习个人理解_2表达式
- 敌兵布阵(简单线段树)
- JavaScript深入学习[1]