hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)
Description
小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题。为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影。(若干代指大于0) 每天要么看电影不刷题,要么刷题不看电影;不会既刷题又看电影。并且每天至少看一部电影,或者刷一道题。现在小Ho要安排每天看哪些电影/刷哪些题目,以及按什么顺序看电影/刷题目。注意A部电影两两不同并且B道题目也两两不同,请你计算小Ho一共有多少种不同的计划方案。由于结果可能非常大,你只需要输出答案对1000000009(大质数)取模的结果。只要某个事件(看电影或刷题)发生的日期不同或者在全部事件中的次序不同,就视为不同的方案。
Input
三个整数N, A和B。
对于30%的数据,N, A, B <= 10
对于60%的数据, 3 <= N <= 4000, 2 <= A <= 4000, 1 <= B <= 4000
对于100%的数据,3 <= N <= 100000, <= A <= 100000, 1 <= B <= 100000, A + B >= N
Output
一个整数表示答案。
Sample Input
4 2 2
Sample Output
4
解题思路:假设有i天看电影,则有n-i天刷题。把a部电影分到i(i∈[2,min(a,n-1)],因为至少要留一天刷题,所以i最大为min(a,n-1),最小为2)天看,每天至少一部的方案数为C(a-1,i-1)(考虑隔板法),又因为a部电影两两不同,因此i天看电影的方案数为a!*C(a-1,i-1);同理,把b道题分到n-i天刷,每天至少刷一题的方案数为C(b-1,n-i-1)(b>=n-i),又因为b道题两两不相同,因此n-i天刷题的方案数为b!*C(b-1,n-i-1);又因为i天看电影被分成前后两段,考虑隔板法,还有C(i-1,1)种。因此最终的公式为a!*b!*C(a-1,i-1)*C(b-1,n-i-1)*(i-1)%p。取模大质数-->费马小定理+乘法逆元。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
const int maxn=;
int n,a,b;LL res,A[maxn]={};//0!=1
LL mod_power(LL x,LL y){//快速幂取模
LL ans=;x%=mod;
while(y){
if(y&)ans=ans*x%mod;
x=x*x%mod;
y>>=;
}
return ans;
}
int main(){
for(int i=;i<maxn;++i)//打印阶乘表
A[i]=A[i-]*i%mod;
while(cin>>n>>a>>b){
res=;
for(int i=;i<=min(a,n-);++i)
if(b>=n-i)res=(res+(A[a]*A[b]%mod*A[a-]%mod*A[b-]%mod*mod_power(A[i-]*A[a-i],mod-)%mod*mod_power(A[n-i-]*A[b-n+i],mod-)%mod*(i-)%mod))%mod;
cout<<res<<endl;
}
return ;
}
hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)的更多相关文章
- LightOJ 1419 – Necklace Polya计数+费马小定理求逆元
题意:给你n个珠子可以染成k种颜色,旋转后相同的视为一种,问共有几种情况 思路:开始按照一般的排列组合做发现情况太多且要太多运算,查了下发现此题是组合中Polya定理模板题- 学的浅只能大致一说公式S ...
- light oj 1067 费马小定理求逆元
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1067 1067 - Combinations Given n differen ...
- 第十四届华中科技大学程序设计竞赛 B Beautiful Trees Cutting【组合数学/费马小定理求逆元/快速幂】
链接:https://www.nowcoder.com/acm/contest/106/B 来源:牛客网 题目描述 It's universally acknowledged that there'r ...
- UVALive-3722 留个坑,为什么费马小定理求逆元不对??
#include <iostream> #include <cstdlib> #include <queue> #include <algorithm> ...
- [CodeVs1515]跳(lucas定理+费马小定理)
嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C ...
- 题解 P4071 【[SDOI2016]排列计数】 (费马小定理求组合数 + 错排问题)
luogu题目传送门! luogu博客通道! 这题要用到错排,先理解一下什么是错排: 问题:有一个数集A,里面有n个元素 a[i].求,如果将其打乱,有多少种方法使得所有第原来的i个数a[i]不在原来 ...
- 洛谷 - P1593 - 因子和 - 费马小定理
类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...
- 51nod A 魔法部落(逆元费马小定理)
A 魔法部落 小Biu所在的部落是一个魔法部落,部落中一共有n+1个人,小Biu是魔法部落中最菜的,所以他的魔力值为1,魔法部落中n个人的魔法值都不相同,第一个人的魔法值是小Biu的3倍,第二个人的魔 ...
- hihoCoder#1698 : 假期计划 组合数
题面:hihoCoder#1698 : 假期计划 组合数 题解: 题目要求是有序的排列,因此我们可以在一开始就乘上A!*B!然后在把这个序列划分成很多段. 这样的话由于乘了阶乘,所以所有排列我们都已 ...
随机推荐
- 【NOIP2017练习&BZOJ4998】星球联盟(强联通分量,并查集)
题意: 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个 ...
- vimtips阅读记录
__BEGIN__ *vimtips.txt* For Vim version 8.0. ------------------------------------------------------- ...
- PHP PDO使用
PHP操作MySQL数据库方式有三种: *1. mysql 最原始的.纯过程化的 如连接: mysql_connect(主机名,账号,密码); 2. mysqli 改进版的.兼容过程化和面向对象化操作 ...
- POJ 3320_Jessica's Reading Problem
题意: 每页书都对应一个知识点,问最少看连续的多少页,才能把所有知识点都看完? 分析: <挑战程序设计竞赛>介绍的尺取法,反复推进区间的开头和结尾,来求取满足条件的最小区间,先确定好一个满 ...
- School Marks-CodeForces
B. School Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- BNU2017校赛
A(模拟) 题意:求一个特殊图的最大流 分析:画画图发现就是for循环扫一遍 B(LCA) 题意:有n个点组成的树,有q个询问,每个询问(A,B,C),学生从B点走最短路径走到C点,再从C点走到根节点 ...
- Spring基础入门(三)
一.Spring的jdbcTemplate操作 (1)Spring是一站式框架,对于javaee三层,每一层都有解决技术. web层:springMVC service:spring的ioc dao层 ...
- centos7更新、更新、每天更新、每天自动更新
每一天我们的系统时时刻刻都被凶狠之徒盯着,保持软件在最新的状态是其中一项我们必须做,也很容易做到的工作. 首先我们立即手动更新所有预先安装的软件: yum -y update 跟着设定系统定时自动更新 ...
- android的ndk学习(1)
android的ndk学习(1) 之前学了一段时间ndk,总认为要总结一下.ndk使得很方便地实现java和C与C++代码的相互沟通.合理地掌握使用ndk能够提高应用程序的运行效率.所以对于学习a ...
- nodejs v8引擎c++编译版本号升级教程
原GCC版本号:4.4.7. 目标:升级GCC到4.8.2.以支持C++11. yum install gcc-c++ 获取GCC 4.8.2包:wget http://gcc.skazkaforyo ...