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

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
 
Author
Rabbit
 
 
思路:找n的错排数的规律时花了挺久,规律如下
1  1*1=1
2  1*1=1
3  1*2=2
4  3*3=9
5 4*11=44
6 5*53=265
 
 
那么n的错排数就是:(n-1的错排数+n-2的错排数)*(n-1)
 
猜对一半就算成功,举例子:n=6  1.猜对3个时,从6个中任选3个,剩下的应满足错排,则有c(6,3)*rcd[6-3]  2.猜对4个时,任选4个,剩下的错排,则有c(6,4)*rcd[6-4]   猜对5个时即意味着第六个也猜中,故5,6是有1个
 
网上其实有直接的错排公式:f(n)=(n-1)*( f(n-1) + f(n-2) )

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long rcd[30];
int n;
void init()//初始化计数每个数的错排个数(即n个数每个都不在自己正确的位置上的种数)
{
rcd[2]=1;
rcd[3]=2;
for(int i=4;i<=25;++i)
rcd[i]=(rcd[i-1]+rcd[i-2])*(i-1);
}
int getc(int m,int k)
{
int ans=m;
for(int i=2;i<=k;++i)
ans=ans*(m-i+1)/i;
return ans;
}
void solve()
{
if(n==1) cout<<1<<endl;
else if(n==2) cout<<1<<endl;
else if(n==3) cout<<1<<endl;
else if(n==4) cout<<7<<endl;
else{
long long ans=0,m;
if(n&1) m=(n>>1)+1;
else m=n>>1;
for(int i=m;i<n-1;++i){
ans+=getc(n,i)*rcd[n-i];
}
cout<<ans+1<<endl;
} }
int main()
{
std::ios::sync_with_stdio(false);
init();
while(scanf("%d",&n)&&n)
solve();
}
Source

RPG的错排的更多相关文章

  1. [HDU 2068] RPG的错排 (错排问题)

    RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...

  2. Hdu2068 RPG的错排 2017-06-27 15:27 30人阅读 评论(0) 收藏

    RPG的错排 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  3. hdu2068 RPG的错排 错排+组合

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. hdu2068 RPG的错排

    RPG的错排 时间限制:1000/1000 MS(Java / Others)内存限制:32768/32768 K(Java / Others)总提交内容:16421接受的提交内容:6670 问题描述 ...

  5. HDU RPG的错排 【错排&&组合】

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  6. HDU2068 RPG的错排 —— 错排

    题目链接:https://vjudge.net/problem/HDU-2068 RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Lim ...

  7. HDU 2068 RPG的错排(错排公式 + 具体解释)

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. HDU-2068 RPG的错排(组合, 错排)

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. G - RPG的错排(错排)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

随机推荐

  1. iOS 一个控件只能拥有一个父类

    不多说上图.多么惨痛的教训,一个子控件   只有最后的一个被addsubview才会生效.

  2. IOS - 首次启动程序出现的画面介绍

    1.在appdelegate.m中找到 “application:didFinishLaunchingWithOptions:” 通过NSUserDefaults 来进行判断 if (![[NSUse ...

  3. MyBatis之CRUD

    1 mybatis框架介绍 1.1回顾jdbc操作数据库的过程 1.2 mybatis开发步骤 A.提供一个SqlMapperConfig.xml(src目录下),该文件主要配置数据库连接,事务,二级 ...

  4. Git的一些实用操作

    Ref:http://stackoverflow.com/questions/17195861/undo-git-update-index-assume-unchanged-file 1. 添加本地忽 ...

  5. 三、jQuery--jQuery实践--搜索框制作

    input标签讲解 <input/>作为按钮的type属性:button.submit(后面会有二者对比分析)

  6. 转:不再以讹传讹,GET和POST的真正区别

    如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继 ...

  7. Eclipse 控制console

    http://blog.csdn.net/leidengyan/article/details/5686691

  8. JavaWeb学习之tomcat安装与运行、tomcat的目录结构、配置tomcat的管理用户、web项目目录、虚拟目录、虚拟主机(1)

    1.tomcat安装与运行双击tomcat目录下的bin/startup.bat,启动之后,输入http://localhost:8080,出现安装成功的提示,表示安装tomcat成功 2.tomca ...

  9. 【翻译一】java-并发

    Lesson: Concurrency Computer users take it for granted that their systems can do more than one thing ...

  10. [LeetCode] Gas Station

    Recording my thought on the go might be fun when I check back later, so this kinda blog has no inten ...