码迷,mamicode.com
首页 > 其他好文 > 详细

杭电 HDU ACM 2068 RPG的错排

时间:2015-04-10 09:39:01      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:acm   c++   杭电   算法   编程   

RPG的错排

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8489    Accepted Submission(s): 3465


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
 
今天 遇见了 三个错排!!!!难度明显递增啊,但万变不离其宗!
注意这次是 答对一半或着一半以上才算过关!!从反面想,因为问的是方法数,当答对一半的时候,这一半人和名字一一对应,剩下的一半名字和人错排即可,同理答对n/2+1个人的时候,那么剩下的错排……依次进行相加。注意终止条件是当答对n-1个人的时候 剩的那个人错排为0,因此必然答对,但是终止条件符合题意,最后加过sum+1 啊!!欠忽视!
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	_int64 ls[30]={0,0,1};
	_int64 gq[30]={1,1,2};
	for(int i=3;i<26;i++)
	{
		ls[i]=(i-1)*(ls[i-1]+ls[i-2]);
		gq[i]=gq[i-1]*i;
	}
	int n;
	while(cin>>n,n)
	{
		_int64 sum=0;
		if(n==1||n==2||n==3)
		{
			cout<<1<<endl;
		    continue;
		}
		for(int k=n/2;k>1;k--)
		sum+=gq[n]/(gq[k]*gq[n-k])*(ls[k]);
		
	printf("%I64d\n",sum+1);
	
	}
	return 0;
}


 

杭电 HDU ACM 2068 RPG的错排

标签:acm   c++   杭电   算法   编程   

原文地址:http://blog.csdn.net/lsgqjh/article/details/44967861

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!