bzoj 4347 [POI2016]Nim z utrudnieniem DP
2024-09-02 07:50:22
4347: [POI2016]Nim z utrudnieniem
Time Limit: 30 Sec Memory Limit: 64 MB
Submit: 733 Solved: 281
[Submit][Status][Discuss]
Description
A和B两个人玩游戏,一共有m颗石子,A把它们分成了n堆,每堆石子数分别为a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取。谁先不能操作,谁就输了。在游戏开始前,B可以扔掉若干堆石子,但是必须保证扔掉的堆数是d的倍数,且不能扔掉所有石子。A先手,请问B有多少种扔的方式,使得B能够获胜。
Input
第一行包含两个正整数n,d(1<=n<=500000,1<=d<=10)。
第二行包含n个正整数a[1],a[2],...,a[n](1<=a[i]<=1000000)。
本题中m不直接给出,但是保证m<=10000000。
Output
输出一行一个整数,即方案数对10^9+7取模的结果。
Sample Input
5 2
1 3 4 1 2
1 3 4 1 2
Sample Output
2
%%claris https://www.cnblogs.com/clrs97/p/5006924.html
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream> #define N 1050007
#define P 1000000007 #define Wb putchar(' ')
#define We putchar('\n')
#define rg register int
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
inline void write(int x)
{
if(x<) putchar('-'),x=-x;
if (x==) putchar();
int num=;char c[];
while(x) c[++num]=(x%)+,x/=;
while(num) putchar(c[num--]);
} int n,D,m,p;
int a[N],f[][N],g[N]; int add(int a,int b)
{
a+=b;
if (a>=P) a-=P;
return a;
}
int main()
{
n=read(),D=read();
for (rg i=;i<n;i++)
{
int x=read();
a[x]++;
if (x>m) m=x;
}
f[][]=p=;
for (rg i=;i<=m;i++)
{
while(p<=i)p<<=;
while(a[i]--)
{
for (rg k=;k<p;k++) g[k]=add(f[D-][k],f[][k^i]);
for (rg j=D-;j>=;j--)
for (rg k=;k<p;k++)
if (k<=(k^i))
{
int x=f[j][k];
f[j][k]=add(f[j-][k],f[j][k^i]);
f[j][k^i]=add(f[j-][k^i],x);
}
for (rg k=;k<p;k++) f[][k]=g[k];
}
}
write(add(f[][],P-(n%D==)));
}
最新文章
- mysql 函数 GROUP_CONCAT 单元格中最长字符串和excel导出问题
- Logistic回归的使用
- springMVC含文件上传调用ajax无法连接后台
- yii2.0 的数据的 查 删
- [实践] ubuntu下编译安装ambari
- Java基础(51):Super与this的区别
- Java Applet与Java Application的特点
- LeetCode41 First Missing Positive
- 利用原生JavaScript获取样式的方式小结
- java中clone的深入理解
- Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切
- 图片上传预览 支持html5的浏览器
- nginx 部署
- 详细图解window环境mongodb下载、安装、配置与使用
- 【分布式系列之dubbo】dubbo管理工具dubbo-admin安装使用
- getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
- Head First 设计模式 (Eric Freeman / Elisabeth Freeman / Kathy Sierra / Bert Bates 著)
- scala变量类型和性质
- CF960G Bandit Blues 【第一类斯特林数 + 分治NTT】
- HDU 1160 FatMouse&#39;s Speed (最长上升子序列)
热门文章
- [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题
- R之RMySQL
- kafka浅谈
- 请教Amazon FBA里面Label Service, Stickerless, Commingled Inventory是什么意思?
- [shell] awk学习
- 王者荣耀交流协会--第2次Scrum会议
- Python学习之路6 - 装饰器
- HDU 5433 Xiao Ming climbing 动态规划
- sql高级主题资料(网络复制)
- c语言学习—图书搜索