P5363-[SDOI2019]移动金币【阶梯博弈,dp,组合数学】

正题

题目链接:https://www.luogu.com.cn/problem/P5363


题目大意

1×n1\times n1×n的网格上有mmm个硬币,两个人轮流向前移动一个硬币但是不能超过前一个硬币,无法移动者输。
求有多少种情况先手必胜。


解题思路

竟然有我会的题,我感动

位置做差分再减去111之后就是一个经典的阶梯博弈问题了,结论就是奇数位置的异或和。

但是这题是计数,先让nnn减去mmm,然后正难则反考虑求总方案和后手必胜的情况,这样问题就变为有多少个长度为mmm的非负整数序列满足它们的和不超过nnn且奇数位置的异或和为000

考虑枚举奇数位置的和,奇数位置个数为z=⌊m+12⌋z=\lfloor\frac{m+1}{2}\rfloorz=2m+1,设fif_ifi表示zzz个数的和为iii时异或和为000的方案数,这个状态直接计算起来很难搞。

可以枚举每一个位的111的数量,显然每一个位的111数量肯是偶数。然后用组合数转移即可。

然后设gig_igi表示m−zm-zmz个数和不超过iii的方案数,那么有gi=∑j=0i(j+m−z−1m−z−1)g_i=\sum_{j=0}^i\binom{j+m-z-1}{m-z-1}gi=j=0i(mz1j+mz1),前缀和转移就好了。

然后答案就是(n+mm)−∑i=0nfign−i\binom{n+m}{m}-\sum_{i=0}^nf_ig_{n-i}(mn+m)i=0nfigni(注意这里的nnn已经减去mmm了),因为模数不是质数直接杨辉三角求就好了。

时间复杂度O(nmlog⁡m)O(nm\log m)O(nmlogm),当然肯定是跑不满的


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5,P=1e9+9;
ll n,m,ans,c[N][51],f[N],g[N];
signed main()
{scanf("%lld%lld",&n,&m);ans=0;if(n<=m)return puts("0")&0;c[0][0]=1;for(ll i=1;i<=n;i++)for(ll j=0;j<=min(i,m);j++)c[i][j]=((j?c[i-1][j-1]:0)+c[i-1][j])%P;n-=m;ll z=(m+1)/2;f[0]=1;for(ll i=1;i<=18;i++)for(ll j=n;j>=0;j--)for(ll k=1;k<=z/2;k++){if(j<(k*(1<<i)))break;(f[j]+=f[j-k*(1<<i)]*c[z][2*k]%P)%=P;}for(ll i=0;i<=n;i++)g[i]=(g[i-1]+c[i+m-z-1][m-z-1])%P;for(ll i=0;i<=n;i++)(ans+=f[i]*g[n-i]%P)%=P;printf("%lld\n",(c[n+m][m]-ans+P)%P);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

M-SOLUTIONS Programming Contest 2020总结

A - Kyu in AtCoder 直接模拟 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<algorithm> using namespace std; int main(…

Emit动态代理.NetCore迁移之旅

前言】前面我们介绍了Aop 从静态代理到动态代理&#xff1a;https://www.cnblogs.com/7tiny/p/9657451.html我们在.NetFramework平台下使用微软提供的Emit技术实现了动态代理类的生成。但是.NetCore作为微软.Net平台的春天&#xff0c;如果类库光支持.NetFramework&#xff0c;…

【LCT】弹飞绵羊(luogu 3203/金牌导航 LCT-2)

正题 luogu 3203 金牌导航 LCT-2 题目大意 给你n个格子&#xff0c;当你在第i个格子时&#xff0c;可以往后跳aia_iai​格&#xff0c;让你进行几下操作&#xff1a; 1.修改第i个数 2.查询在第i个格子跳多少下会跳出界 解题思路 往后跳相当于连接格子&#xff0c;由此建立一…

【每日一题】7月15日题目精讲—生日快乐

【每日一题】7月15日题目精讲—生日快乐 [SCOI2009]生日快乐 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 windy的生日到了&#xff0c;为了庆祝生日&#xff0c;他的朋友…

P1712-[NOI2016]区间【线段树,尺取法】

正题 题目链接:https://www.luogu.com.cn/problem/P1712 题目大意 nnn个区间&#xff0c;求出其中mmm个区间使得它们有覆盖同一个点且最长区间长度减去最短长度最小。 解题思路 因为是最接近的mmm个&#xff0c;考虑一种叫尺取法的做法。 先把区间按照长度排序&#xff0c;每…

Codeforces Round #659 (Div. 2)

日常爆零掉分wa A. Common Prefixes 根据前一个字符串构造后一个字符串&#xff0c;从哪不同就从哪换 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<i…

asp.net core结合Gitlab-CI实现自动化部署

一、前言在之前的文章中写过k8sJenkinsGitLab-自动化部署asp.net core项目 的topic&#xff0c;这次讲解一下gitlab-ci的CI/CD&#xff0c;说实话&#xff0c;自动化部署是在是非常的舒服&#xff0c;而且gitlab-ci很适合中小项目的部署&#xff0c;大项目推荐使用k8s。阅读目录…

【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)

正题 luogu 4842 金牌导航 LCT-3 题目大意 给你一棵树&#xff0c;让你进行一些操作&#xff1a; 1.删除一条边 2.连接一条边 3.给一条路径上的点加上x 4.给出一条路径&#xff0c;在该路径选取两个点&#xff0c;求这两个点之间路径的权值和的期望值 解题思路 该树可以用LC…

P6329-[模板]点分树 | 震波

正题 题目链接:https://www.luogu.com.cn/problem/P6329 解题思路 给出nnn个点的一棵树&#xff0c;每个点有权值&#xff0c;有mmm次操作 修改一个点xxx的权值为yyy询问距离点xxx不超过kkk的所有点点权和 解题思路 点分树的模板题&#xff0c;先点分治构造出点分树&#x…

Codeforces Round #660 (Div. 2)

A - Captain Flint and Crew Recruitment 刚开始还想筛法求质数&#xff0c;最后发现是个脑筋急转弯 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<ios…

[译]ABP vNext介绍

译者注ASP.NET Boilerplate是.Net平台非常优秀的一个开源Web应用程序框架,在国内也有大量的粉丝.近日, 本人在github上闲逛, 发现ASP.NET Boilerplate团队又悄悄的建立了一个新项目: ABP vNext从名称可以看出来, 这是ASP.NET Boilerplate的下一代框架. 那么, 为什么要开发这个新…

[HAOI2008]玩具取名

[HAOI2008]玩具取名 文章目录题目描述输出描述:题解代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 某人有一套玩具&#xff0c;并想法给玩具命名。首先他选…

【KMP】重复子串(ybtoj KMP-2)

正题 ybtoj KMP-2 题目大意 问你一个字符串最多由多少个相同的字符串组合而成 解题思路 如下图&#xff0c;先用KMP求出nx数组&#xff0c;那么有1∼nxn1\sim nx_n1∼nxn​和(n−nxn)∼n(n-nx_n)\sim n(n−nxn​)∼n相匹配 不难推出1∼(n−nxn)1\sim (n-nx_n)1∼(n−nxn​)…

P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】

正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 nnn个点的一张图&#xff0c;每条边有权值&#xff0c;一棵生成树的权值是所有边权和乘上边权的gcdgcdgcd&#xff0c;即 val(T)(∑i1n−1wei)gcd⁡(we1,we2,…,wen−1)val(T)\left(\sum\limits_{i1}^{n-1} w_…

C# 8小特性

对于C# 8&#xff0c;有吸引了大多数注意力的重大特性&#xff0c;如默认接口方法和可空引用&#xff0c;也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。新的赋值运算符&#xff1a;&&和||从第一个版本开始&#xff0c;C#就支持把等号和另外一…

[HAOI2016]字符合并(ing)

[HAOI2016]字符合并 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 有一个长度为 n 的 01 串&#xff0c;你可以每次将相邻的 k 个字符合并&#xff0c;得到一个新的字符并…

AtCoder Beginner Contest 174 总结

这次做了ABDF。我也不知道我怎么做的&#xff08;乱做-.- A - Air Conditioner 签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #…

【KMP】周期长度和(luogu 3435/ybtoj KMP-3)

正题 luogu 3435 ybtoj KMP-3 题目大意 定义S的proper前缀为S中非空且len<|S|的前缀&#xff0c;若Q是A的proper前缀&#xff0c;且A是QQ的前缀 现在问你字符串S所有前缀的最大周期之和 解题思路 如上图&#xff0c;对于一个字符串S&#xff0c;如果有周期Q&#xff0c;那…

P6097-[模板]子集卷积

正题 题目链接:https://www.luogu.com.cn/problem/P6097 题目大意 长度为2n2^n2n的序列a,ba,ba,b求一个ccc满足 ck∑i∣jk,i&j∅aibjc_k\sum_{i|jk,i\&j\varnothing}a_i\times b_jck​i∣jk,i&j∅∑​ai​bj​ 解题思路 从炫酷反演魔术过来的&#xff0c;顺便写…

dotnet core 开发无缝兼容Http和Websocket协议的接口服务

在应用接口开发中往往要针对不同协义开发相应的代理服务&#xff0c;但对于Websocket和http这两种协议来说就有些不同&#xff0c;从实现上来看Websocket可以说是Http的升级子协议&#xff0c; 两者在协议处理上基本一致&#xff0c;具体可以在解释Body上有所不同。FastHttpApi…