感觉博弈题都是高大上神秘结论。。。

感谢@KaiSuoShuTong 开锁疏通愿意教我这题的博弈部分/qq

考虑每次移动棋子,实际上是有一车 \(a_i\),每次操作相当于令 \(a_i-c,a_{i+1}+c\)。

考虑奇数位置上的 \(a_i\) 为 \(0\) 时的策略。我们发现如果此时先手走一步,后手也会跟着走一步同样的。所以此时偶数位置上的数为多少都无所谓。

考虑奇数位置上有值的情况。只要我成功将奇数位置上的数全部清空,那么我就胜利了。

然后变成了普通的 nim 游戏。

结论:是否获胜相当于对奇数上的位置做 nim 游戏。

nim 游戏的必输状态为异或起来全 \(0\)。(二进制下每一位之和为偶数)

正难则反,必输比必胜好考虑。我们考虑计算必输状态。

和 LGP2490 一样,考虑对奇数堆和偶数堆分别构造 GF。

下面设 \(b=\lfloor\frac{m}{2}\rfloor,a+b=m\)。

设奇数块的 GF \(F(x,y)\) 为:

\[F(x,y)=\prod_{i=0}\sum_{j=0}^1x^{j2^i}y_i^j
\]

偶数块和最后一段的 GF \(G(x)\) 为:

\[G(x)=\sum_{i=0}x^i=\frac{1}{1-x}
\]

有:

\[H(x,y)=x^{a+b}F^a(x,y)G^{b+1}(x)
\]

答案为:

\[ans=[x^n]\sum_{2|t_i}[\prod y_i^{t_i}]H(x,y)
\]

然后我们随便推一下:

\[F^a(x,y)=\prod_{i=0}\sum_{j=0}^ax^{j2^i}y_i^j
\]
\[H(x,y)=\frac{\prod_{i=0}\sum_{j=0}^a\binom{a}{j}x^{j2^i}y_i^j}{(1-x)^{b+1}}
\]
\[ans=[x^{n-m}]\sum_{2|t_i}[\prod y_i^{t_i}]H(x,y)
\]

考虑 \(F_k(x,y)=\prod_{i=0}^k\sum_{j=0}^a\binom{a}{j}x^{j2^i}y_i^j\),以及 \(dp[t][n]=[x^n]\sum_{2|t_i}[\prod y_i^{t_i}]F_{k-1}(x,y)\)。

转移是个卷积。

复杂度 \(O(nm\log n)\)。

#include<cstdio>
typedef unsigned ui;
const ui M=1.5e5+5,mod=1e9+9;
ui n,m,a,b,C[30],g[M],dp[19][M];
inline ui pow(ui a,ui b){
ui ans(1);for(;b;b>>=1,a=1ull*a*a%mod)if(b&1)ans=1ull*ans*a%mod;return ans;
}
inline ui binom(const ui&n,const ui&m){
ui x(1),y(1),z(1);
for(ui i=1;i<=n;++i)x=1ull*x*i%mod;
for(ui i=1;i<=m;++i)y=1ull*y*i%mod;
for(ui i=1;i<=n-m;++i)z=1ull*z*i%mod;
return 1ull*x*pow(1ull*y*z%mod,mod-2)%mod;
}
signed main(){
ui lgn(0),ans(0);
g[0]=g[1]=1;C[0]=C[1]=1;dp[0][0]=1;
scanf("%u%u",&n,&m);b=m>>1;a=m-b;n-=m;
while((1<<lgn)<=n)++lgn;--lgn;
for(ui i=2;i<=a;++i)C[i]=1ull*(mod-mod/i)*C[mod%i]%mod;
for(ui i=1;i<=a;++i)C[i]=1ull*C[i]*C[i-1]%mod*(a-i+1)%mod;
for(ui i=2;i<=n;++i)g[i]=1ull*(mod-mod/i)*g[mod%i]%mod;
for(ui i=1;i<=n;++i)g[i]=1ull*g[i-1]*g[i]%mod*(b+i)%mod;
for(ui i=1;i<=lgn;++i){
for(ui j=0;j<=n;++j){
for(ui x=0;(x<<i-1)<=j&&x<=a;x+=2)dp[i][j]=(dp[i][j]+1ull*C[x]*dp[i-1][j-(x<<i-1)])%mod;
}
}
for(ui i=0;i<=n;++i)ans=(ans+1ull*dp[lgn][i]*g[n-i])%mod;
printf("%u",(mod+binom(n+m,m)-ans)%mod);
}

LGP5363题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 用Java开发局域网内文件传输软件遇到的一些问题

    项目地址:https://github.com/b84955189/FileTransfer 由于巨懒的我不太喜欢使用U盘操作文件,特此开发一个简易的文件传输程序. 目前仅限局域网内传输,后期会尝试写 ...

  2. NSMutableString练习

    从要求讲3个520it拼接在一起 会生成很多新的字符串 NSString *res = @""; NSString *subStr = @"520"; // 1 ...

  3. 部署YUM仓库 (最近睡眠质量很差,你什么时候搬过来住)

    部署YUM仓库 1.YUM概述 YUM(Yellow dog Updater Modified) 基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件由集中的YUM软件仓库提供 2.主备安装 ...

  4. Ansible之playbook剧本

    Ansible之playbook剧本 目录 Ansible之playbook剧本 1. playbook的组成 2. 剧本示例test1 2.1 剧本制作 2.2 准备http.conf 2.3 运行 ...

  5. Dubbo原理解析(非常透彻)

    一.概述 dubbo是一款经典的rpc框架,用来远程调用服务的. dubbo的作用: 面向接口的远程方法调用 智能容错和负载均衡 服务自动注册和发现. 自定义序列化协议 Dubbo 架构中的核心角色有 ...

  6. Elasticsearch 7.12 启用 x-pack 组件

    文章目录 修改配置文件 设置密码 使用密码 首先,你要有一套es,关于es的部署,可以看我的另一篇博客 ELK-EFK-v7.12.0日志平台部署 $ ./bin/elasticsearch-plug ...

  7. [LeetCode]1221. 分割平衡字符串

    在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = ...

  8. OpenLDAP测试搭建

    目录 ldap介绍 测试环境 安装LDAP服务端 设置LDAP的root密码 配置LDAP服务端 创建LDAP证书 设置LDAP数据库 创建LDAP用户 添加防火墙规则 开启LDAP日志 配置LDAP ...

  9. 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能测试场景设计

    说明: 本文是基于虚拟机环境配置设计的 性能测试需求 总tps≥100 每个业务的rt<500ms 持续稳定跑50万业务量 单场景 目的:找到单场景的性能问题,为容量场景提供参考,如果低于容量场 ...

  10. 微信小程序wifi控制开发

    小程序wifi控制开发方案 ----- 由小程序通过公众号给wifi控制板进行配网,后台服务器自动生成设备名并注册在数据库中,wifi控制板自动保存生成的设备名,小程序可读取WIFI控制板的数据,控制 ...