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输入结束。

Output

对应每组数据输出最小移动距离。

Sample Input

1
2
0

Sample Output

1
1

假设i个人在他本来位置,其余人错排的种数是f[i],那么题目要求的就是所有大于等于(n+1)/2的f[i]的和,n+1是为了对奇数偶数情况统一。

假设k个人错排是p[k],

那么就是n个人先取出i个人在自己位置C(n, i),其余人再错排p[n-i],然后控制i的范围就OK了。

这里需要注意的是由于题目没有模的情况,所以所有数可能会很大,所以在求p和c的时候最好是相邻项间递推。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <algorithm>
#define LL long longusing namespace std;int n;
LL p[30], c[30], ans;void init()
{p[0] = 1;p[1] = 0;p[2] = 1;for (int i = 3; i < 30; ++i)p[i] = (i-1)*(p[i-1]+p[i-2]);
}void cal()
{c[0] = 1;for (int i = 1; i <= n; ++i)c[i] = c[i-1]*(n-i+1)/i;
}void work()
{ans = 0;int half = (n+1)/2;for (int i = 0; i+half <= n; ++i)ans += c[i+half]*p[n-i-half];printf("%I64d\n", ans);
}int main()
{//freopen("test.in", "r", stdin);
    init();while (scanf("%d", &n) != EOF && n){cal();work();}return 0;
}

转载于:https://www.cnblogs.com/andyqsmart/p/4756598.html

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

  1. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 转载于:https://www ...

  2. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  3. ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...

  4. ACM学习历程—HDU2476 String painter(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...

  5. ACM学习历程—HDU5668 Circle(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5668 这题的话,假设每次报x个,那么可以模拟一遍, 假设第i个出局的是a[i],那么从第i-1个出局的人后,重新 ...

  6. ACM学习历程—HDU5666 Segment(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...

  7. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  8. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)

    http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...

  9. ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

最新文章

  1. 迪普科技以近50%份额全面中标国家电网2016信息化硬件采购
  2. django后台多页面分页逻辑python代码
  3. LaTeX表格字太贴近上面表线
  4. 宇视硬盘录像机onvif_视频监控系统中强大的录像机,兼容不同品牌,看看有哪些监控厂家...
  5. db2取数据库日期时间_DB2数据库取得当前时间的正确解析
  6. ES6.3 index Sorting测试
  7. 带你啃透深度学习必学“圣经”花书!(附带论文代码精读讲解)
  8. 【Struts】:Struts1和Struts2的区别与联系
  9. redis从入门到入魔
  10. wireshark出现rst的原因_多次RST以及不同场景下的RST报文的差异
  11. 新东方雅思词汇(List 21~ List 25)
  12. 在网上打印双面和单面的资料哪里打印价格便宜
  13. ED1 SoC Linux环境搭建
  14. 企业大楼AI无感考勤解决方案
  15. Unity圆环进度条制作
  16. 你知道吗?火狐搜集您的数据?
  17. BugkuCTF 游戏过关
  18. numpy实现图像融合
  19. 浪潮商用机器:以开放心态,做大Power生态
  20. 到底什么才是真正的双核浏览器

热门文章

  1. saltstack mysql_saltstack学习五:return及入库_MySQL
  2. Kubernetes tutorial - K8S 官方入门教程
  3. cmd 【已解决】windows连接手机,运行adb devices提示“unauthorized”
  4. 二项分布 , 多项分布, 以及与之对应的beta分布和狄利克雷分布
  5. posix thread线程
  6. iOS设计模式 - 迭代器
  7. Android - 基于Toolbar的Navigation Drawer(Material Design)
  8. 发消息给非windows窗体程序
  9. 传统图片验证算法的缺点及改进(原理篇)
  10. 中医移动医疗_中医之极简移动医疗