我博弈基础好差..

Luogu P2490


题意

有一个长度为$ n$的棋盘,黑白相间的放$ k$个棋子,保证$ k$是偶数且最左边为白子

每次小$ A$可以移动不超过$ d$个白子,然后小$ B$可以移动不超过$ d$个黑子

双方不能把棋子越过其他棋子

求有多少种初始方案使得小$ A$先手必胜

注意白子只能往右黑子只能往左


$NimK游戏$

对于一个局面,我们可以把每对相邻的(白,黑)对看成一堆石子,数量即为这两个棋子之间的距离

问题等价于每次可以在不超过$ d$堆中取石子求是否必胜

考虑普通的$ Nim$游戏相当于$ d=1$的情况,必败态为每堆的异或值为$ 0$

推广到$ d>1$的情况就是二进制下每一位在所有石子堆中的出现次数均是$d+1$的倍数则必败

这就是$NimK$游戏


$ Solution$

$ DP$

设$ f_{i,j}$表示只考虑二进制前$i$位,由$ j$颗石子组成的必败态的方案数

$ f_{i+1,j+s2^{i+1}(d+1)}+=f_{i,j}*\binom{k/2}{s(d+1)}$  

意义是选出若干堆在这一位上有$ 1$且乘上选这些堆的方案数

注意最后需要

$ f_{i,j}*=\binom{n-k/2-i}{k/2}$

其意义是给这些堆石子在原棋盘上定位

然后就做完了


$ my \ code$

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define p 1000000007
#define rt register int
#define ll long long
using namespace std;
inline ll read(){
ll x = ; char zf = ; char ch = getchar();
while (ch != '-' && !isdigit(ch)) ch = getchar();
if (ch == '-') zf = -, ch = getchar();
while (isdigit(ch)) x = x * + ch - '', ch = getchar(); return x * zf;
}
void write(ll y){if(y<)putchar('-'),y=-y;if(y>)write(y/);putchar(y%+);}
void writeln(const ll y){write(y);putchar('\n');}
int i,j,k,m,n,x,y,z,cnt;
int f[][];
int C[][];
int main(){
C[][]=;
n=read();k=read();int d=read();
for(rt i=;i<=n;i++){
C[i][]=;
for(rt j=;j<=i&&j<=k;j++)
C[i][j]=(C[i-][j]+C[i-][j-])%p;
} for(rt i=;i*(d+)<=k/;i++)
f[][i*(d+)]=C[k/][i*(d+)];
for(rt i=;i<=;i++)
for(rt j=;j<=n;j++){
for(rt s=;s<=k&&j+(<<i+)*s<=n;s+=d+)
(f[i+][j+(<<i+)*s]+=1ll*f[i][j]*C[k/][s]%p)%=p;
}
int ans=C[n][k];
for(rt i=;n-k/-i>=;i++)
f[][i]=1ll*f[][i]*C[n-k/-i][k/]%p,(ans-=f[][i])%=p;
cout<<(ans+p)%p;
return ;
}

Luogu P2490「JSOI2016」黑白棋的更多相关文章

  1. loj#2071. 「JSOI2016」最佳团体

    题目链接 loj#2071. 「JSOI2016」最佳团体 题解 树形dp强行01分规 代码 #include<cstdio> #include<cstring> #inclu ...

  2. loj#2076. 「JSOI2016」炸弹攻击 模拟退火

    目录 题目链接 题解 代码 题目链接 loj#2076. 「JSOI2016」炸弹攻击 题解 模拟退火 退火时,由于答案比较小,但是温度比较高 所以在算exp时最好把相差的点数乘以一个常数让选取更差的 ...

  3. [LOJ 2082] 「JSOI2016」炸弹攻击 2

    [LOJ 2082] 「JSOI2016」炸弹攻击 2 链接 链接 题解 枚举发射源,将发射源当做原点,对敌人和激光塔极角排序. 由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在 \(\pi\ ...

  4. 「JSOI2016」灯塔

    「JSOI2016」灯塔 传送门 我们先只计算照亮左边的灯塔的最低高度,计算右边的类同,然后只要取 \(\max\) 就好了. 那么稍微整理一下式子:\(p_i \ge h_j - h_i + \sq ...

  5. LOJ #2116 Luogu P3241「HNOI2015」开店

    好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...

  6. LOJ #2547 Luogu P4517「JSOI2018」防御网络

    好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...

  7. LOJ#2249 Luogu P2305「NOI2014」购票

    几乎肝了半个下午和整个晚上 斜率优化的模型好多啊... LOJ #2249 Luogu P2305 题意 给定一棵树,第$ i$个点如果离某个祖先$ x$的距离不超过$ L_i$,可以花费$ P_i· ...

  8. LOJ #2527 Luogu P4491「HAOI2018」染色

    好像网上没人....和我推出....同一个式子啊..... LOJ #2527 Luogu P4491 题意 $ n$个格子中每个格子可以涂$ m$种颜色中的一种 若有$ k$种颜色恰好涂了$ s$格 ...

  9. 【luogu P4711 「化学」相对分子质量】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4711 要细心模拟 #include <cstdio> #include <algorith ...

随机推荐

  1. MySQL事务,事务隔离级别详解

    1.什么是事务 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 2.事务的4个特性 原子性(Atomicity).一致性(Consistency).隔离性(Isolatio ...

  2. CEdit编辑框字体和背景设置

    CEdit编辑框字体和背景设置注意事项:当CEdit为“disable”时,设置编辑框的字体和背景会没有效果.解决方案:将CEdit的Style设置为“readonly”,这样设置就能生效了,同时也能 ...

  3. 5款 Mac 常用PDF阅读和编辑软件推荐

    PDF和Word.TXT等文档一样,都是我们最常用的文档格式,那么一款好用的浏览或编辑PDF的工具就很有必要了,今天和大家分享5款Mac上优秀的PDF阅读和编辑工具. 以下内容来自[风云社区 SCOE ...

  4. awk统计文件大小

    在Linux系统中,经常会遇到某个目录下文件很多,要统计这些文件的空间大小.可以采用awk来实现.如下是实现这个功能的例子. vim sum.sh #!/bin/bash# sum.shcd //ba ...

  5. kafka与zookeeper

    kafka简介 kafka (官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率. 下载地址:http://kafka.apache.or ...

  6. Java_去除字符串空格

    String ss = " happy new year "; System.out.println(ss + "------" + ss.length()); ...

  7. docker 基础之操作容器

    Docker子命令分类 Docker 环境信息 info .version 容器生命周期管理 Create.exec.kill.pause.restart.rm.run.start.stop.unpa ...

  8. hd loadBalanceServer F5 BIG-IP / Citrix NetScaler / Radware / Array / HAProxy /

    s 五.Citrix NetScaler 和 CDN 案例 问题描述: Citrix 10.5.66.9软件版本下,存在计时器bug,此bug会造成CDN长连接回源超过设备默认的180S,会发fin包 ...

  9. Spring项目集成ShiroFilter简单配置

    Shiros是我们开发中常用的用来实现权限控制的一种工具包,它主要有认证.授权.加密.会话管理.与Web集成.缓存等功能.我是从事javaweb工作的,我就经常遇到需要实现权限控制的项目,之前我们都是 ...

  10. java io系列23之 BufferedReader(字符缓冲输入流)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_23.html 更多内容请参考:java io系列01之 "目录" Buffere ...