【BZOJ2729】【HNOI2012】排队(组合数学)
2017-10-01 16:21
393 查看
不想弄题面了。。。
好容易的数学题目
很明显自己写高精度吧。。。(不解释了)
剩下的如何计算。
要有两类情况
①老师之间有男生
那么,这种情况下,直接插空就行了
先把M个女生插进去A(m,n+1)
再把2个老师插进去A(2,n+m+1)
②老师之间只有一个女生
先选出一个女生,放在老师之间A(1,m)
再把剩下的女生插进男生中A(m-1,n+1)
最后把老师和女生看成整体放进去A(1,m+n)
因为老师之间位置可以互换,还有乘2
最后两类直接相加即可
题解
做这道题目我真的好蠢。。。好容易的数学题目
很明显自己写高精度吧。。。(不解释了)
剩下的如何计算。
要有两类情况
①老师之间有男生
那么,这种情况下,直接插空就行了
先把M个女生插进去A(m,n+1)
再把2个老师插进去A(2,n+m+1)
②老师之间只有一个女生
先选出一个女生,放在老师之间A(1,m)
再把剩下的女生插进男生中A(m-1,n+1)
最后把老师和女生看成整体放进去A(1,m+n)
因为老师之间位置可以互换,还有乘2
最后两类直接相加即可
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; inline int read() { register int x=0,t=1; register char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-'){t=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();} return x*t; } struct BigInt { int s[1000000]; int ws; void Prepare() { s[1]=1; ws=1; } void Multi(int x) { for(int i=1;i<=ws;++i)s[i]*=x; for(int i=1;i<=ws;++i)s[i+1]+=s[i]/10,s[i]%=10; while(s[ws+1])ws+=1,s[ws+1]+=s[ws]/10,s[ws]%=10; } void write() { for(int i=ws;i;--i)printf("%d",s[i]); printf("\n"); } }Ans1,Ans2; int main() { int N=read(),M=read(); //第一种情况,老师之间插男生 Ans1.Prepare(); for(int i=2;i<=N;++i)Ans1.Multi(i); Ans1.Multi(N+1);Ans1.Multi(N); for(int i=1;i<=M;++i)Ans1.Multi(N+4-i); //第二种情况,老师之间插女生 //首先选出一个女生放在老师之间 Ans2.Prepare(); Ans2.Multi(M); Ans2.Multi(2); //作为一个整体丢在男生之间 for(int i=1;i<=N;++i)Ans2.Multi(i+1); //再把女生放进来 for(int i=1;i<M;++i)Ans2.Multi(N+3-i); if(Ans1.ws<Ans2.ws)swap(Ans1,Ans2); for(int i=1;i<=Ans2.ws;++i)Ans1.s[i]+=Ans2.s[i]; for(int i=1;i<=Ans1.ws;++i)Ans1.s[i+1]+=Ans1.s[i]/10,Ans1.s[i]%=10; while(Ans1.s[Ans1.ws+1])Ans1.ws++,Ans1.s[Ans1.ws+1]+=Ans1.s[Ans1.ws]/10,Ans1.s[Ans1.ws]%=10; Ans1.write(); return 0; }
相关文章推荐
- BZOJ 2729 HNOI2012 排队 组合数学
- 【BZOJ2729】[HNOI2012]排队【组合数学】
- BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】
- [BZOJ2729][HNOI2012]排队(组合数学+高精度)
- 组合数学+高精度 BZOJ2729 [HNOI2012]排队
- [BZOJ2729][HNOI2012]排队(组合数学+高精度)
- BZOJ 2729: [HNOI2012]排队|排列组合
- 【BZOJ2729】[HNOI2012]排队 组合数
- 【HNOI2012】【BZOJ2729】排队
- 【bzoj2729】[HNOI2012]排队
- BZOJ2729 [HNOI2012]排队
- BZOJ2729 [HNOI2012]排队
- bzoj 2729: [HNOI2012]排队
- 【BZOJ】2729: [HNOI2012]排队
- [BZOJ2729] [HNOI2012]排队
- bzoj2729: [HNOI2012]排队
- 【BZOJ】【2729】【HNOI2012】排队
- [BZOJ 2729][HNOI2012]排队:高精度+组合数
- BZOJ2729: [HNOI2012]排队
- 【BZOJ】【P2729】【HNOI2012】【排队】【题解】【数学】