4827 妹子[快速乘法]
2016-07-09 20:07
232 查看
4827 妹子
时间限制: 1 s空间限制: 64000 KB
题目等级 : 钻石 Diamond
题解
查看运行结果
题目描述 Description
特大喜讯:信奥班来妹纸了!
为了给妹纸介绍自己,信奥班的才子们专门准备了一场自我介绍会,出席的就太多了,有
a,b,c,d......全是爷们儿就不一一介绍了。
a 听见有妹纸了,就自告奋勇当主持人,当然也就是第一个出场的,然后我们自
己安排出场顺序,为了不给妹纸制造紧张的气氛,我们决定把妹纸们穿插在我们之间进行
自我介绍。但是其中有一个妹纸是很爷们儿的,所以她并不想和其他的妹子相邻,而其他
的妹纸也表现出很傲慢,非要站在一起。另外,由于b 是高一的,所以我们不能让他
当出头鸟,也就是不能把他排在第2 个出场(a 之后),当然也不能欺负他,也
就是不能让他最后一个出场。
(一大堆描述终于完了,不知道你们读懂没,反正我是晕了……)
总之,信奥班有N 个男生,其中a 第一个出场,b 不能第二或者最后出场。
来了M 个女生,其中有1 个女生不能与其他女生相邻,而剩下的M-1 个女生必须相邻。
作为主持人的a 想知道我们有多少种合法的出场顺序。
输入描述 Input Description
一行两个整数,N 和M,用空格隔开,分别表示N 个男生和M 个女生
输出描述 Output Description
一行一个整数,合法方案总数,最终结果可能会很大,把它对100000007 取模再输出。
样例输入 Sample Input
样例一:
2 2
样例二:
4 3
样例输出 Sample Output
2
96
数据范围及提示 Data Size & Hint
对于10%的数据:N<=5, M<=5
对于30%的数据:N<=100,M<=2
对于所有的数据:2<=N <=100000, 2<=M<=100000
分类标签 Tags 点此展开
暂无标签10分代码(朴素乘法):
#include<cstdio> #include<iostream> using namespace std; int n,m; int A(int n){ int res=1; for(int i=n;i>1;i--){ res*=i; } return res; } int solve(int n,int m){ return A(m-1)*A(n-1)*(2+(n-1)*(n-2)); } int main(){ scanf("%d%d",&n,&m); printf("%d\n",solve(n,m)); return 0; }
AC代码:
#include<cstdio> #include<iostream> using namespace std; const int mod=100000007; int go(int x,int y){//快速乘法 x*y int res=0; while(y){ if(y&1) res=(res+x)%mod; y>>=1; x=(x+x)%mod; } return res%mod; } int A(int n){ int res=1; for(int i=n;i>1;i--) res=go(res,i); return res; } int solve(int n,int m){ return go(go(A(m-1),A(n-1)),(2+go((n-1),(n-2)))); } int main(){ int n,m; scanf("%d%d",&n,&m); printf("%d\n",solve(n,m)); return 0; }
long long即可
#include<cstdio> #include<iostream> #define ll long long using namespace std; const int mod=100000007 ; ll n,m; ll A(ll n){ ll res=1; for(int i=n;i>1;i--){ res=(res*i)%mod; } return res; } ll solve(ll n,ll m){ ll x=(A(m-1)*A(n-1))%mod; return (x*(2+(n-1)*(n-2)))%mod; } int main(){ scanf("%lld%lld",&n,&m); printf("%lld\n",solve(n,m)); return 0; }
相关文章推荐
- 07-09 07:28:38.350: E/AndroidRuntime(1437): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.googleplay.ui.activity.MainActivity" on path: DexPathList[[zip file "/data/app/c
- 视频播放器无法播放720P 30fps的视频debug
- 华为研发工程师编程题----汽水瓶
- 大神的神级js代码
- Hibernate的实体类中为什么要继承Serializable?
- Sum Root to Leaf Numbers
- hdu 5178(尺取法)
- java中ArrayList排序
- Android UI布局优化
- 华为研发工程师编程题----进制转换(pow函数,string.find())
- j2ee分布式缓存同步实现方案dlcache v1.0.0
- TCP/IP编程之connect函数详解
- leetcode: Evaluate Reverse Polish Notation
- Java StringBuffer谜题
- HDU 1240 Asteroids! (三维BFS)
- 内核日志及printk结构浅析
- PL/SQL Developer创建Job的步骤
- Activity五种数据传递方式
- markdown里如何显示HTML标签和转义字符?
- leetcode:Isomorphic Strings