LGP5363题解
感觉博弈题都是高大上神秘结论。。。
感谢@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)\) 为:
\]
偶数块和最后一段的 GF \(G(x)\) 为:
\]
有:
\]
答案为:
\]
然后我们随便推一下:
\]
\]
\]
考虑 \(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题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- Redis-46面试题
1.什么是 Redis?简述它的优缺点? Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据 ...
- linux计划任务之cron
目录 cron计划任务之用户级 cron计划任务之系统级 cron计划任务之用户级 1.安装crond centos7 执行命令: # yum install -y crontabs /bin/sys ...
- python使用插入法实现链表反转
# encoding=utf-8 class LNode(object): def __init__(self, x): self.data = x self.next = None def reve ...
- go基础——运算符
算数运算符 /* 算术运算符:+,-,*,/,%,++,-- */ a := 10 b := 3 sum := a + b //加减乘类似 fmt.Printf("%d + %d = %d\ ...
- mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长
一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select name fr ...
- https校验问题
一般会报SSL问题:解决办法参考 http://blog.csdn.net/a506681571/article/details/78284589 # 设置未经允许验证的SSL方法,只需运行一次便可 ...
- 记录使用WKWebView进行OC与JS交互所踩过的坑
目录: 1.页面cookie缓存 2.允许弹出JS的弹框 3.在webview页面加载的时候,添加加载进度条 4.禁止掉webview页面的长按复制粘贴功能 5.设置webview的userAgent ...
- Oracle 撤回已经提交的事务
在PL/SQL操作了一条delete语句习惯性的commit 了,因少加了where条件 导致多删了数据 1.查询视图v$sqlarea,找到操作那条SQL的时间(FIRST_LOAD_TIME) s ...
- 年前最后一次2022.1.28_RP++
T1同昨(我看到题目就粘上昨天的代码,结果题还没发我就A了hhhhhh) T2一开始想用深搜,结果T掉了...只好改广搜,就挺令人头大 点击查看宽广对比 #include<bits/stdc++ ...
- Note -「最大团-最小度不等式」
这是什么奇怪的名字qwq. 一些定义 只为便于理解,没有苛求专业的定义. 简单无向图:不存在重边.自环的无向图. \(\delta(G)\):无向图 \(G\) 中结点的最小度数.即 \(\m ...