翻棋子游戏:题意:一个棋盘上每个格子有一个棋子,每次操作可以随便选一个朝上的棋子(x,y),代表第i行第j列的棋子,选择一个形如(x,b)或(a,y)(其中b < y,a < x)的棋子,然后把它和(x,y)一起翻转,无法操作的人输。分析:把坐标为(x,y)的棋子看成大小分别为x和y的两堆石子,则本题转化为了经典的Nim游戏,如果难以把棋子看作石子,可以先把Nim游戏中的一堆石子看成一
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2580#include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int N = 2000005; int a[N],b[N]; int main() {
题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3060题意:有n堆石子,分别有个,这里,两个游戏者轮流操作,每次可以选一堆,拿走至少一个石子,但是不能拿走超过一半的石子。比如,若有3堆石子,每堆分别有5,1,2
清空/分割游戏也叫做Ferguson博弈。进行游戏需要用到两个盒子,在游戏的开始,第一个盒子中有n枚石子,第二个盒子中有m个石子(n, m > 0)。参与游戏的两名玩家轮流执行这样的操作:清空一个盒子中的石子,然后从另一个盒子中拿若干石子到被清空的盒子中,使得最后两个盒子都不空。当两个盒子中都只有一枚石子时,游戏结束。最后成功执行操作的玩家获胜。找出游戏中所有的P位置。结论:对于一个位置(x
首先来说说限制排列 例子:相邻禁位排列问题:在整数1,2,3,...,n的无重全排列中,要求,求全体排列数 分析:利用容斥不难得到 旋转木马问题:8个小孩围坐在旋转木马上,问有多少种变换座位的方法,使得每个小孩前面坐的都不是原来的小孩? 分析:其实做法跟上面的方法一样,只是注意这里是换排列,那么总数就应该是7!,得到结果为:  
数等于: 那么既然这样,我们令S∞={∞·a, ∞·b,∞·c},那
Catalan数的定义: 设表示用下面的方法把凸多边形区域分成三角形区域的方法数:在有n+1条边的凸多边形区域内通过插入在其中不相交的对角线而把它分成三角形区域。定义。则满足递推关系
问题提出:n封不同的信对应n个不同的信箱,问都装错信封的方法有多少种? 分析:我们都知道,错排公式的递推式为:,其中 而进一步可以得到: 那么它是如何推导出来的呢?下面就用容斥原理来进行分析: 首先,我们令S为自然数1,2,3,4,...n的全排列的全体,则 然后我们定义S性质上的集合,其中表示排列中i在其自然顺序的位置上,
一.巴什博弈(Bash Game):首先我们来玩一个比较古老的报数游戏。A和B一起报数,每个人每次最少报一个,最多报4个。轮流报数,看谁先
题目:取石子游戏hdu2516 234(-1) 解释4 - 1 = 3 , n==3为必败点,所以4为必胜点56(-1)7(-2)89(-1)10(-2)11(-3)12(-1) 13
第一类Stirling数 s(p,k) s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数。 s(p,k)的递推公式: 边界条件:
mespace std;typedef long long LL;const LL MOD=10007;LL quick_mod(LL a,LL b){ LL ans=1; a%=MOD; while(b) { i
题目:Count the Buildings题意:N座高楼,高
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1524题意:在一个有
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1848题意:有3
题目:http://poj.org/problem?id=2369题意:给定一个序列,问需要最少需要置换多少次才能变为有序序列.分析:对于每一位,算出最少的置换到自己应该的数字。每一位都有这样的数字,取最小公倍数就可以。#include #include #include using namespace std;const int N = 1005;
题目:http://acm.hd
next_permutation的函数
题目:Double Dealing#include #in
题目:Big Coefficients 题意:F(x) = (1+x)^a1 + (1+x)^a2 + ... + (1+x)^am,求系数是奇数的项的个数。容斥原理:递归形式dfs(int beg,set S,int sym){ ans+=num(S)*sym; for(int i=beg;i<=n;i++) dfs(i,S∩A[i
有一个n*m的棋盘,每次可以取走一个方格并拿掉它右边和上面的所
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3389题意:1-N带编号的盒子,当编号满足A>B && A非空 && (A + B) % 3 == 0 && (A +
题目:Number Sequence#include #include #include using namespace std;typedef long long LL;const int N=1000005;const LL MOD=1000000007;int p[N];int a[N],b[N];bool prime[N];LL C[1005][100
题目:Coprime题意:给三个数m,n,k, 0思路:二分+容斥原理 由于所找的数与m,n互质,那么这个数不能含有m,n所包含的素因子。但是k很大,不可能一个一个生成。于是二分,找到最小的x,使得小于或等于x的数中满足条件的数的个数大于或等于k,则这个最小值即为答案。在判断小于或等于x的数中满足条件的数的个数时,可用容
今天我们
组合游戏的特点 (1)两个玩家 (2)游戏的操作状态是一个有限的集合 (3)游戏的双方轮流操作 (4)双方每次操作必须符合游戏规定 (5
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号