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

感谢@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. MySQL 数据库高级操作 (配图)

    MySQL数据库高级操作 1.一键部署mysql 数据库 2.数据表高级操作 3.数据库用户管理 4.数据库用户授权 1.首先一键部署mysql 数据库 : 可以看我之前的博客 https://www ...

  2. ELK、ELFK企业级日志分析系统

    ELK.ELFK企业级日志分析系统 目录 ELK.ELFK企业级日志分析系统 一.ELK日志分析系统 1. ELK简介 1.2 ElasticSearch 1.3 Logstash 1.4 Kiban ...

  3. Endnote

    #Entnote无法使用Find all test 搜索到sciencedirect的文章(或Elsevier 爱思唯尔) 下面是来自endnote官方论坛的原文Find full text for ...

  4. 《PHP程序员面试笔试宝典》——如何处理与面试官持不同观点这个问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 在面试的过程中,求职者所持有的观点不可能与面试官一模一样,在对某个问题的看法上,很有可能两个人相去甚远.当与面试官持不同 ...

  5. java-poi 批量导入excel数据

    1,首先,前端发送MultipartFile类型文件,后端接收 2,分别创建多个ImportParams对象(easypoi),对应工作蒲 注意:pom中 要有相对应的配置 <!-- easyp ...

  6. kafka在linux下安装

    简介 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 相关术语(参考百度百科) Broker Kafka集群包含一个或多个服务器,这种服务器被称为brok ...

  7. linux安装ngixn

    卸载ngxin(第一次安装请略过) 1.检查nginx是否启动,是否安装ngxin 检查是否安装nginx命令 rpm -qa|grep nginx 检查nginx是否启动命令: pa -ef|gre ...

  8. 移动BI应该怎么规划?每一个数据产品经理必看

    在移动化.大数据浪潮的今天,基于数据做决策应该是每一家公司的标配:每家公司都有专门负责数据的人,也都应该有一个BI部门. 而移动BI,基于手机端随时随地进行数据查询和分析--更是BI中不可或缺的一部分 ...

  9. Blazor和Vue对比学习(基础1.1):组件结构

    难度:★ 简单说一说: 1.Vue和Blazor都遵循单文件结果,即HTML(视图模板).CSS(样式).JS/C#(代码逻辑)写在一个文件里,Vue的文件后缀为.vue,Blazor的文件后缀为.r ...

  10. 【基础知识】CPU上下文切换(进程上下文切换 - 线程上下文切换 - 中断上下文切换)

    CPU 上下文切换是什么 CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器 ...