有点儿神秘?

根据他这个题意说的,白子向右的第一个一定是对应的黑子啊。

所以棋子的绝对位置是不重要的,我们只需要考虑白子和黑子的相对位置,然后考虑用 GF 来拼凑状态就好了。

下面的 \(k\) 是题面中的 \(\frac{k}{2}\)。

这是一个 k-nim。\(k\) 堆石头每次最多选 \(d\) 堆。

先丢结论:设 \(x_i\) 为 \(x\) 在二进制下的第 \(i\) 位,那么先手必败的条件一定满足对于任意 \(i\) 有 \(\sum_{j=1}^k(x_j)_i \bmod(d+1)=0\)。

证明不会,只会感性理解(

很明显全 \(0\) 随便撤一步都不可能撤回全 \(0\) 的状态,只需要证明非全 \(0\) 是必胜即可。

而非全 \(0\) 明显是有办法撤到全 \(0\) 的。所以我们就成功感性理解了

注意到必败的方法比必胜的要好算,所以我们计算必败的方案。

根据这个我们就可以考虑 GF 了!!!!!!

我们设单块(一对黑白子)的 GF 为 \(F(x,y)\),那么有:

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

我们知道有 \(n-2k\) 个位置是空的,空格被黑白子分成了 \(k+1\) 段,那么我们再设一个:

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

我们有:

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

答案是

\[[x^n]\sum_{d+1|t_i}[\prod y_i^{t_i}]H(x,y)
\]

虽然看上去很奇怪,但是我们成功写成了 GF 的形式

我们先考虑 \(F^k\) 是个什么鬼东西:

\[x^{2k}\prod_{i=0}(x^{2^i}y_i+1)^k
\]

前面 \(x^{2k}\) 可以直接丢掉了。

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

我们考虑一个很神秘的东西:对 GF 的指数进行 DP(?)

我们设一个 \(F_n(x,y)=\prod_{i=0}^n(\sum_{j=0}^k\binom{k}{j}x^{j2^{i}}y_i^j)\)。

再设一个 \(dp[t][n]=[x^n(\sum_{d+1|t_i,i\leq k}\prod y_i^{t_i})]F_{t-1}(x,y)\)。(这里 \(t-1\) 是为了避免 \(dp[0]\) 初始化有点麻烦)

我们似乎只需要求出 \(dp[\lfloor\log n\rfloor][0\sim n-2k]\) 即可?

然后好像把这个序列卷上一个组合数序列就行了。

转移很明显,根据定义直接卷上去就完了。

复杂度是 \(O(nk\log n)\),足以通过此题。

#include<cstdio>
typedef unsigned ui;
const ui M=10005,mod=1e9+7;
ui n,d,k,C[55],g[M],dp[17][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(1),ans(0);
g[0]=g[1]=1;C[0]=C[1]=1;dp[0][0]=1;
scanf("%u%u%u",&n,&k,&d);++d;n-=k;k>>=1;
while((1<<lgn)<=n)++lgn;--lgn;
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]*g[i-1]%mod*(k+i)%mod;
for(ui i=2;i<=k;++i)C[i]=1ull*(mod-mod/i)*C[mod%i]%mod;
for(ui i=1;i<=k;++i)C[i]=1ull*C[i]*C[i-1]%mod*(k-i+1)%mod;
for(ui i=1;i<=lgn;++i){
for(ui j=0;j<=n;++j){
for(ui x=0;(x<<i-1)<=j&&x<=k;x+=d)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+(k<<1),k<<1)-ans)%mod);
}

LGP2490题解的更多相关文章

  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. JavaBean基本概念

    JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范. JavaBean 与其它 Java 类相比而言独一无二的特征: 提供一个默认的无参构造函 ...

  2. js 对象的深克隆

    前端笔试或者面试的时候,很喜欢问的一个问题就是对象的深度克隆,或者说是对象的深度复制.其实这个问题说容易很容易,但是要说全面也挺不易. 要弄明白对象的克隆,首先要明白js中对象的组成.在js中一切实例 ...

  3. 深入分析Java中的关键字static

    在平时开发当中,我们经常会遇见static关键字.这篇文章就把java中static关键字的使用方法的原理进行一个深入的分析.先给出这篇文章的大致脉络: 首先,描述了static关键字去修饰java类 ...

  4. iOS应用性能调优--初级---王朋

    目录 我要给出的建议将分为三个不同的等级: 入门级. 中级和进阶级: 入门级(这是些你一定会经常用在你app开发中的建议) 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier ...

  5. ELK 日志分析系统概述及部署

    ELK 日志分析系统概述及部署 1.ELK概述: ELK简介 : ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch.Logstash 和 Kiabana 三个开源工具配合使用 ...

  6. GoJS 使用笔记

    作为商业软件,GoJs很容易使用,文档也很完备,不过项目中没有时间系统地按照文档学习,总是希望快速入门使用,所以将项目中遇到的问题精简一下,希望对后来者有些帮助. 开始使用 这里先展示一个最简单的例子 ...

  7. (Unity)XML文件读写与IO文件操作类使用介绍

    using System.Xml;                //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...

  8. awvas启动不起来解决方案

    当双击桌面的"Acunetix图标",自动打开浏览器跳转页面,结果页面显示"无法访问此网站"按Windows+R键输入services.msc打开服务界面查看A ...

  9. [题解]UVA658 It's not a Bug, it's a Feature!

    链接:http://vjudge.net/problem/viewProblem.action?id=22169 描述:有n个漏洞,m个修复漏洞的方法,每种方法耗时不一样,求修复漏洞的最短时间.每种方 ...

  10. 【C# 线程】线程池 epoll和IOCP之比较

    总结:IOCP :我的打印文件放在店里面排队,轮到我打印了,店长帮我打印一下,打印好了通知我来拿 Epoll  :我的打印文件放在店里面排队,轮到我叫我一下,我自己来打印. 直入正题:Epoll 是L ...