[CF1536F] Omkar and Akmar(博弈论?组合数学)
题面
甲乙轮流在一个有
N
N
N 个位置的环上放字母(环上每个位置不同),每次可以放一个 A 或 B ,要求不能有相同的字母相邻,轮到某个人时不能走了,另一个人就获胜。问在两个人都绝对聪明的情况下,有多少种不同的游戏进程?
答案对
1
0
9
+
7
10^9+7
109+7 取模,
2
≤
N
≤
1
0
6
2\leq N\leq 10^6
2≤N≤106。
样例输入:2
样例输出:4
题解
很不幸,我们做过原题,幸运的是,我忘了。
不难推出一个结论:后手必胜(
2
≤
N
2\leq N
2≤N)。原因是,最终不能走的时候,场上 A 和 B 的总数一定是偶数(反证法易证),意味着最后一个走的是后手。
而且这个结论强大的地方在于,不论你怎么走,只要最后必须无子可放,那么后手想输都输不了。
接下来,游戏进程就可以不用考虑博弈论的问题了。
我们枚举最终有多少个字母,然后剩余的空白就填入 AB 之间,再确定哪些是甲走的哪些是乙走的,最后确定每个人放的字母的相对顺序,那么最终答案就是
∑
i
=
1
n
/
2
(
(
2
i
n
−
2
i
)
+
(
2
i
−
1
n
−
2
i
−
1
)
)
⋅
2
⋅
(
2
i
i
)
⋅
(
i
!
)
2
\sum_{i=1}^{n/2}\Bigg( {2i\choose n-2i}+{2i-1\choose n-2i-1} \Bigg)\cdot2\cdot{2i\choose i}\cdot (i!)^2
i=1∑n/2((n−2i2i)+(n−2i−12i−1))⋅2⋅(i2i)⋅(i!)2
中间乘 2 是因为 ABAB... 和 BABA... 都有可能。
CODE
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 1000005
#define DB double
#define LL long long
#define ENDL putchar('\n')
#define lowbit(x) ((-x) & (x))
#define INF 0x3f3f3f3f
LL read() {
LL f=1,x=0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
const int MOD = 1000000007;
int n,m,i,j,s,o,k;
int fac[MAXN],inv[MAXN],invf[MAXN];
int C(int n,int m) {
if(m < 0 || m > n) return 0;
return fac[n] *1ll* invf[m] % MOD *1ll* invf[n-m] % MOD;
}
int main() {
n = read();
fac[0] = fac[1] = inv[0] = inv[1] = invf[0] = invf[1] = 1;
for(int i = 2;i <= n;i ++) {
fac[i] = fac[i-1] *1ll* i % MOD;
inv[i] = (MOD-inv[MOD%i]) *1ll* (MOD/i) % MOD;
invf[i] = invf[i-1] *1ll* inv[i] % MOD;
}
int ans = 0,po = 1;
for(int i = 2;i <= n;i += 2) {
po = po *4ll % MOD;
int as = 0;
(as += C(i,n-i) *2ll % MOD) %= MOD;
(as += C(i-1,n-i-1) *2ll % MOD) %= MOD;
(ans += as *1ll* C(i,i/2) % MOD *1ll* fac[i/2] % MOD *1ll* fac[i/2] % MOD) %= MOD;
}
printf("%d\n",ans);
return 0;
}
[CF1536F] Omkar and Akmar(博弈论?组合数学)的更多相关文章
- BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)
Description 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...
- 《Mathematical Olympiad——组合数学》——操作和游戏
这篇文章,我们开始对奥数中有关操作和游戏的问题进行分析和讨论,其实在信息学竞赛中涉及到的一些博弈问题(分析必胜策略)的问题(例如巴什博弈.尼姆博弈),本质上来讲,就是组合数学当中的组合游戏,并不是真正 ...
- 浅谈博弈论中的两个基本模型——Bash Game&&Nim Game
最近在数学这一块搞了蛮多题目,已经解决了数论基础,线性代数(只有矩阵,行列式待坑),组合数学中的一些简单问题.所以接下来不可避免的对博弈论这一哲学大坑开工. 当然,由于我很菜,所以也只能从最基础最容易 ...
- IT人生知识分享:博弈论的理性思维
背景: 昨天看了<最强大脑>,由于节目比较有争议性,不知为什么,作为一名感性的人,就想试一下如果自己理性分析会是怎样的呢? 过程是这样的: 中国队(3人)VS英国队(4人). 1:李建东( ...
- [poj2348]Euclid's Game(博弈论+gcd)
Euclid's Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9033 Accepted: 3695 Des ...
- 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)
Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...
- TYVJ博弈论
一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140 飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...
- Codeforces 549C. The Game Of Parity[博弈论]
C. The Game Of Parity time limit per test 1 second memory limit per test 256 megabytes input standar ...
- poj 3734 Blocks 快速幂+费马小定理+组合数学
题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...
随机推荐
- 【Java面试】请你简单说一下Mysql的事务隔离级别
一个工作了6年的粉丝,去阿里面试,在第一面的时候被问到"Mysql的事务隔离级别". 他竟然没有回答上来,一直在私信向我诉苦. 我说,你只能怪年轻时候的你,那个时候不够努力导致现在 ...
- Linux查看日志文件写入速度的4种方法
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 有时,我们需要查看某个文件的增长速度,如日志文件,以此来感受系统的负载情况,因为一般情况下,日志写入越快,说明系统 ...
- Maven POM文件介绍
1. POM文件是什么 1.1 Super POM 1.2 Minimal POM 1.3 Effective POM 3. 项目继承 和 项目聚合 2.1 Project Inheritance 项 ...
- 使用PowerShell校验文件MD5
更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年7月14日. 方法1:使用Get-FileHash命令 (Get-FileHash ".\SQLSer ...
- 谷歌浏览器Chrome官方下载地址
经常看到朋友的电脑上安装是魔改的谷歌浏览器.这里将谷歌浏览器官方的下载地址放在这里.有需要的朋友可以自己去下载. 下载地址 Chrome最新稳定在线安装版:https://www.google.cn/ ...
- java+mybatis实现一个简单的银行系统,实现存取款与账户查询
先创建数据库和表,使用的是MySQL数据库. create database mybatis; use mybatis; CREATE TABLE `accountdo` ( `id` varchar ...
- linux系统健康检查脚本
#!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo " ...
- bat-命令行安装软件
批处理 执行的两种方式 1.直接右键以管理员身份运行 2.在管理员身份的cmd窗口中 .\xxx.bat 执行 区别 第一种方式 当前cmd默认路径为 C:\windows\system32 第二种方 ...
- 本地拉取服务器上的项目,SVN 由于目标计算机积极拒绝 无法连接失败
下面几种解决方案一定一定一定都要试一下哈, 比如,如果你的SVN没有启动,并且防火墙也开启了,那么你即便启动了SVN,也是无法拉取项目的,需要把防火墙也关闭. 1.是否启动了svn 输入命令查看是否启 ...
- NC20241 [SCOI2005]扫雷MINE
NC20241 [SCOI2005]扫雷MINE 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 \(n \times m\) 的矩阵里面有一些雷,要你根据一些信息找出雷来. 万圣节到了 ,&q ...