Inès Romainovitch ne pouvait rien faire avec sa fille unique et adorée, lentêtée Chloé. Leur famille était pourtant bien établie : le père de Chloé, Léo Borisovitch, était médecin, et sa mère travaillait comme économiste dans une petite entreprise.
Chloé était tombée amoureuse de Théo, un garçon sérieux et charmant, mais selon Inès Romainovitch, il ne venait pas dune famille convenable, et ce nétait pas le genre de gendre dont elle rêvait. Théo avait perdu sa mère à la naissance, élevé par son père, Antoine, et sa grand-mère, Mémé Lucie. La vieille femme était souvent malade et mourut quand Théo eut quinze ans. Il ne resta plus que son père, qui ne se remaria jamais et travailla comme chauffeur dans une usine.
Leur relation était admirable : ils se comprenaient parfaitement, Antoine ne buvait jamais et soutenait son fils en toute chose. Théo faisait même du sport. Leur seul souci était de vivre avec le salaire modeste du père, mais tous deux lacceptaient. Théo ne réclamait jamais de choses chères, et Antoine lui en était reconnaissant.
« Papa, jai rencontré Chloé, une fille géniale, mais sa famille est dirigée par sa mère. Inès Romainovitch est exigeante, et j# Codeforces Round #724 (Div. 2) 1536F. Omkar and Akmar(组合数学+博弈)
最新推荐文章于 2022-03-19 19:18:11 发布
the best 最新推荐文章于 2022-03-19 19:18:11 发布
阅读量204 收藏 1
点赞数
题意:
在一个圆桌上有 n n n个位置,初始某些位置可能有人,现在 A l i c e Alice Alice和 B o b Bob Bob轮流选择一个空的位置坐下,要求选择的座位旁边至少有一个座位有人当所有位置都有人或者某人无法选择座位时游戏结束如果游戏结束时场上的人数的奇偶性对先手有利,则先手获胜,否则后手获胜问初始座位为空时,有多少种不同的初始座位,使得先手必胜
题解:
首先,当所有位置都坐满时游戏结束,根据 n n n的奇偶性判断先手胜负:
1. 1. 1. 当 n n n为偶数时,先手必胜
2. 2. 2. 当 n n n为奇数时,后手必胜
当游戏未结束时,此时的胜负情况还未确定但是当游戏结束时,一定是所有位置被坐满,那么此时只有这两种胜负情况
假设游戏还未结束,且此时轮到 A l i c e Alice Alice操作,此时的局面如果无论怎么选,之后 B o b Bob Bob都能让游戏以先手必胜结束,那么 A l i c e Alice Alice只有选择某个座位让游戏提前结束才有可能获胜,否则必败
但是这题初始是空的,两人轮流选座位,直到游戏结束,那么两人其实可以一直选,直到所有位置坐满那也就是说,游戏必定会以所有位置坐满为结束,那么只有 n n n的奇偶性能决定胜负
所以先手必胜的条件就是 n n n为偶数
那么现在问题就转化为:有多少种初始局面(至少有一个位置有人),使得游戏必定会进行到所有位置坐满才结束
进一步等价于:初始不能存在两个相邻的空位,否则两人就可以提前结束游戏
那么现在问题就变成:有多少种圆排列,使得没有两个相邻的位置同时为空,且至少有一个位置为空
考虑线性情况,假设有 k k k个位置有人, n k n-k nk为空,那么当插入这 k k k个人后,会形成 k k k个间隔,这 n k n-k nk个空位要放到这些间隔中,每个间隔最多放一个空位,那么方案数为 C k n k + C k 1 n k 1 C_{k}^{n-k}+C_{k-1}^{n-k-1} Cknk+Ck1nk1
再考虑圆排列的情况,需要断环成链,当第 1 1 1个位置和第 n n n个位置同时为空时,是不合法的,因此要减去 C k 1 n k 1 C_{k-1}^{n-k-1} Ck1nk1
所以线性情况的合法方案数为 C k n k C_{k}^{n-k} Cknk
圆排列下,还要考虑旋转的情况,所以再乘上 n n n
但是这样会计算重复,因为圆排列旋转 k k k次可能得到相同的情况,所以方案数其实为 k k k
但是发现线性情况下已经考虑了顺序,所以圆排列其实是不用乘的因此圆排列的方案数就是 C k n k C_{k}^{n-k} Cknk
最后,因为 n n n为偶数先手必胜,所以只考虑 n k n-k nk为偶数的情况,并且 k k k个人可以任意排列,所以还要乘上 k ! k! k! 并且对手也能任意排列,因此也要乘上 k ! k! k!
代码中写成 ( k ! ) 2 (k!)^2 (k!)2
代码:
#pragma GCC diagnostic error “-std=c++11”
#include
#include
#include
#include
#include
#include
#include







