HDU2068 RPG的错排 【组合+错排】

RPG的错排

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 7874    Accepted Submission(s): 3217

Problem Description

今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁。RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔;第二次猜:R是草儿,P是月野兔,G是公主;第三次猜:R是草儿,P是公主,G是月野兔;......可怜的野骆驼第六次终于把RPG分清楚了。由于RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们,可现在有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们只要求他答对一半或以上就算过关,请问有多少组答案能使他顺利过关。

Input

输入的数据里有多个case,每个case包括一个n,代表有几个女生,(n<=25), n = 0输入结束。

Sample Input

1
2
0

Sample Output

1
1

Author

Rabbit

Source

RPG专场练习赛

组合加错排,得注意防溢出

#include <stdio.h>
#include <string.h>
#include <math.h>

int D[20] = {1, 0, 1};

__int64 f(int n, int m) {
	if (m > n / 2) m = n - m;
	__int64 ans = 1;
	for (int i = 0; i < m; ++i)
		ans = ans * (n - i) / (i + 1);
	return ans;
}

int main() {
	// freopen("stdin.txt", "r", stdin);
	int n, i, j;
	__int64 sum;
	for (i = 3; i <= 15; ++i) D[i] = (i - 1) * (D[i-1] + D[i-2]);
	while (scanf("%d", &n), n) {
		sum = 0;
		i = n >> 1;
		for (j = 0; j <= i; ++j)
			sum += D[j] * f(n, n - j);
		printf("%I64d\n", sum);
	}
	return 0;
}
时间: 2024-08-03 17:23:44

HDU2068 RPG的错排 【组合+错排】的相关文章

[ACM] hdu 2049 不容易系列之(4)——考新郎 (组合+错排)

国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个. 最后,揭开盖头,如果找错了对象就要当众跪搓衣板... 看来做新郎也不是容易的事情... 假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能. Input 输入数据的第一行是

[Qt解错篇]报错:error: undefined reference to vtable for ClassName

一.问题描述: 编译工程时报错:error: undefined reference to vtable for ClassName,如图示: 二.问题分析: 造成这种错误的原因很多,甚至在纯C++编程过程中也可能出现.下面根据自己情况,具体问题具体分析. 原因:在原先没有Q_OBJECT关键字的工程中添加了该关键字,但是没有执行qmake,直接编译导致出现该错误. 三.例子: 原先工程的类建立: class CAppConfig { public: CAppConfig(void); CApp

ACM学习历程—HDU2068 RPG的错排(组合数学)

Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔:第二次猜:R是草儿,P是月野兔,G是公主:第三次猜:R是草儿,P是公主,G是月野兔:......可怜的野骆驼第六次终于把RPG分清楚了.由于RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们,可现在有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们只要求他答对一半或以

hdu2068 RPG的错排

RPG的错排 时间限制:1000/1000 MS(Java / Others)内存限制:32768/32768 K(Java / Others)总提交内容:16421接受的提交内容:6670 问题描述 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R t是公主,P是草儿,G是月野兔;第二次猜:R t是草儿,P是月野兔,G是公主;第三次猜:R t是草儿,P是公主,G是月野兔; .....

组合数学+递推式 hdu2068 RPG的错排

我的思路是这样的: 枚举正确的个数i,然后从n个位置中选择i个位置,C(n,i) 那么剩下的n-i个位置,都不是答案,我们暂时成为错位排列 现在的难点就在于,如何球错位排列 设F[i]表示i个数字,错位排列的种类数 那么,先只考虑前i-1个数字错位排列,暂时在第i个位置把数字i放上,此时是不合法的因为i第i个位置不能放i,所以要考虑把i和其他数字调换位置 在前i-1个位置中,选出一个位置,把这个位置的数字与数字i调换位置,可能的情况就有(i-1)*F[i-1] 看似情况全部考虑了,其实还有一种情

hdu2068 RPG的错排 组合数/递推

1 #include<stdio.h> 2 long long arr[21]; 3 long long c(int a,int b) 4 { 5 long long i,sum=1,j; 6 for (i=a,j=1;i>=a-b+1,j<=b;i--,j++) sum=sum*i/j; 7 return sum; 8 } 9 void func() 10 { 11 int i; 12 arr[1]=0;arr[2]=1; 13 for(i=3;i<=26;i++) 14

【转】HDU-2049-不容易系列之(4)——考新郎:错排+组合

现对于上一道”神.上帝以及老天爷” 只求M个数的错排数 不同的本题 是求N个数中M的错排数 先从N个数中 取M个数有CnM种取法 再乘上M的错排数就是答案 错排数的求法参考上一篇文章 其中组合公式如下 #include<iostream> #include<string> #include<iomanip> using namespace std; int main() { long long a[21]={0, 0, 1}; // a[i]表示i个数的错排种类 lon

错排公式 错排(加组合)

递推的方法推导错排公式 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法; 综上得到 M(n)=(n-1)[M(n-2)+M

bzoj4517排列计数 错排+组合

4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1491  Solved: 903[Submit][Status][Discuss] Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 满足条件的序列可能很多,序列数对 10^9+7 取模. Input