分析

阶梯NIM模型:共有m+1堆石子,石子总数不超过n-m,求必胜的,即奇数堆石子数目异或和非零的局面数。补集转化,答案C(n,m)-奇数堆石子数目异或和位0的局面数。

可以想到按位dp,设f[i,j]表示已经考虑了前i位(异或和0),石子和为j的方案数;转移时考虑下一位出现的被统计1的个数k,k为偶数,带系数C((m+1)/2,k),即m+1/2个奇数堆中出现k个1的方案。

最后将没有分配的n-m-i个石子放入m/2个偶数堆中,可以一个都不放。

实现

#include <bits/stdc++.h>
#define ll long long
using namespace std; const int N=2e5+10;
const int mod=1e9+9; int n,m;
ll fc[N],fv[N],f[20][N]; inline ll c(int n,int m) {
return fc[n]*fv[m]%mod*fv[n-m]%mod;
} int main() {
scanf("%d%d",&n,&m);
fc[0]=fc[1]=fv[0]=fv[1]=1;
for(int i=2; i<=n+m; ++i) fv[i]=fv[mod%i]*(mod-mod/i)%mod;
for(int i=2; i<=n+m; ++i) fv[i]=fv[i-1]*fv[i]%mod,fc[i]=fc[i-1]*i%mod;
f[19][0]=1;
for(int i=19; i; --i)
for(int j=0; j<=n-m; ++j) if(f[i][j])
for(int k=0; k<=(m+1)/2&&j+(k<<(i-1))<=n-m; k+=2)
(f[i-1][j+(k<<(i-1))]+=f[i][j]*c((m+1)/2,k)%mod)%=mod;
int ans=c(n,m);
for(int i=0; i<=n-m; ++i) ans=(ans-f[0][i]*c(n-m-i+m/2,m/2)+mod)%mod;
printf("%d\n",ans);
return 0;
}

暴力

#include <bits/stdc++.h>
#include <typeinfo>
#define ll long long
using namespace std; const int N=255;
const int M=55;
const int mod=1e9+9; int n,m,T;
int f[M][N][N<<2];
inline void add(int&x,int y) {
if((x+=y)>=mod) x-=mod;
} int main() {
scanf("%d%d",&n,&m);
for(T=1; T<n; T<<=1);
f[0][0][0]=1;
for(int j=0; j<m; ++j) {
int(&F)[N][N<<2]=f[j+1];
int(&G)[N][N<<2]=f[j];
if(j&1) {
for(int i=j; i<=n; ++i)
for(int p=0; p<T; ++p) if(G[i][p])
for(int k=i+1; k<=n; ++k)
add(F[k][p],G[i][p]);
}
else {
for(int i=j; i<=n; ++i)
for(int p=0; p<T; ++p) if(G[i][p])
for(int k=i+1; k<=n; ++k)
add(F[k][p^(k-i-1)],G[i][p]);
}
}
int ans=0;
for(int i=m; i<=n; ++i)
for(int p=1; p<T; ++p)
add(ans,f[m][i][p]);
printf("%d\n",ans);
return 0;
}

[SDOI2019] 移动金币的更多相关文章

  1. 【洛谷5363】[SDOI2019] 移动金币(动态规划)

    点此看题面 大致题意: 有\(n\)个格子,让你摆放\(m\)个金币.二人博弈,每次选择一个金币向左移任意格,无法移动者输.问有多少种方案使先手必胜. 阶梯\(Nim\) 阶梯\(Nim\)的基本模型 ...

  2. Luogu P5363 [SDOI2019]移动金币

    话说这题放在智推里好久了的说,再不写掉对不起自己233 首先你要知道一个叫做阶梯Nim的东西,具体的可以看这篇博客 那么我们发现这和这道题的关系就很明显了,我们把两个金币之间的距离看作阶梯Nim的每一 ...

  3. # [SDOI2019]移动金币 阶梯博弈 dp

    [SDOI移动金币 链接 vijos 思路 阶梯博弈,dp统计. 参见wxyww 代码 #include <bits/stdc++.h> using namespace std; cons ...

  4. Luogu5363 SDOI2019移动金币(博弈+动态规划)

    容易想到可以转化为一个有m堆石子,石子总数不超过n-m的阶梯博弈.阶梯博弈的结论是相当于只考虑奇数层石子的nim游戏. nim和不为0不好算,于是用总方案数减掉nim和为0的方案数.然后考虑dp,按位 ...

  5. [VIJOS2055][SDOI2019]移动金币:DP+组合数学

    分析 显然可以转化为阶梯nim. 于是问题转化为了对于所有\(i \in [0,n-m]\),求长度为\(\lfloor\frac{m+1}{2}\rfloor\),和为\(i\),异或和非\(0\) ...

  6. [SDOI2019]移动金币(博弈论+阶梯Nim+按位DP)

    首先可以把问题转化一下:m堆石子,一共石子数不超过(n-m)颗,每次可以将一堆中一些石子推向前一堆,无法操作则失败,问有多少种方法使得先手必胜? 然后这个显然是个阶梯Nim,然后有这样的结论:奇数层异 ...

  7. 分金币 bzoj 3293

    分金币(1s 128M)  coin [问题描述] 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的 ...

  8. Android播放gif动画,增加屏幕掉金币效果

    前言:播放gif的版本有很多,我这边使用Android自带的Movie类播放gif动画,也是在别人的基础上进行修改.有同样需求的朋友可以参考我的demo. 1.效果图如下: 2.部分主要代码 Main ...

  9. noi 1.5 45:金币

    描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天)里,每天收到两枚金币:之后三天(第四.五.六天)里,每天收到三枚金币:之后四天(第七.八.九.十天)里, ...

随机推荐

  1. CodeForces 592C The Big Race

    公倍数之间的情况都是一样的,有循环节. 注意min(a,b)>t的情况和最后一段的处理.C++写可能爆longlong,直接Java搞吧...... import java.io.Buffere ...

  2. C. The Two Routes---cf602C(Dij)

    http://codeforces.com/problemset/problem/602/C 题目大意:  有n个城市 有m条铁路  如果两个城市没有铁路  那么一定有公路 求从1 到 n 用铁路和公 ...

  3. Linux驱动开发:USB驱动之usb_skel分析

    在学习了这么些天的驱动之后,个人觉得驱动就是个架构的问题,只要把架构弄清楚了 然后往里面添砖加瓦就可以了,所以似乎看起来不是太困难,但也许是是我经验不足吧,这只能算是个人浅见了 这两天在学习USB驱动 ...

  4. startActivity启动过程分析(转)

    基于Android 6.0的源码剖析, 分析android Activity启动流程,相关源码: frameworks/base/services/core/java/com/android/serv ...

  5. soapUI系列之—-05 JDBC Request & Xpath Match

    一.配置JDBC Connection String 1. 以Oracle为例,要使用JDBC数据库就要先下一个 oracle JDBC的驱动,下载成功后把它放到soapUI安装目录下的  bin/e ...

  6. ssh配置无password登录

    前提.机器A,B,均为RedHat Linux操作系统,均实用户user 1.以usernameuser登录,在A机器上运行 ssh-keygen -t rsa 一路回车.不须要输入password ...

  7. HiWorkV1.3版震撼公布,今日起正式公开測试!

    今天HiWork迎来了公开測试和V1.3大版本号更迭,HiWork集成的机器人达到20种,未读消息提醒亦可从不同维度进行设置,不断变好真是件振奋人心的事儿呢. 在这个看重颜值(kan lian)的互联 ...

  8. 'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    'cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件. Path 添加 %SystemRoot%/system32;%SystemRoot%;%SystemRoot%/System32/Wb ...

  9. jquery ui tabs详解(中文)

    1 属性1.11 ajaxOptions,当选项卡加载内容时,添加一个ajax选项.只有ajax时,添加的ajax选项才起作用.默认值为null.上面的例子中,添加了beforeSend和succes ...

  10. String StringBuffer StringBuilder 对比

      1.StringBuffer是线程安全的,StringBuilder是非线程安全的   2.对String的修改其实是new了一个StringBuilder并调用append方法,然后调用toSt ...