【BZOJ2729】[HNOI2012]排队

Description

某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)

Input

只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述。
对于 30%的数据 n≤100,m≤100
对于 100%的数据 n≤2000,m≤2000

Output

输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数。注意答案可能很大。

Sample Input

1 1

Sample Output

12

题解:先将老师与男生放到一起,然后将女生插到男生中间,方案书就是A(n+2,n+2)*A(n+3,m),再将老师相邻的方案减去,即将两个老师捆在一起,方案数为A(2,2)*A(n+1,n+1)*A(n+2,m)。

然后就是丧心病狂的高精度时间了。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
struct cbig
{
int len;
int v[200000];
cbig(){len=0,memset(v,0,sizeof(v));}
cbig(int x)
{
len=0,memset(v,0,sizeof(v));
while(x) v[++len]=x%10,x/=10;
}
void operator *= (int b)
{
int i;
for(i=1;i<=len;i++) v[i]*=b;
for(i=1;i<=len;i++) v[i+1]+=v[i]/10,v[i]%=10;
while(v[len+1]) len++,v[len+1]+=v[len]/10,v[len]%=10;
}
void operator -= (cbig b)
{
int i;
for(i=1;i<=b.len;i++) v[i]-=b.v[i];
for(i=1;i<=len;i++)
{
if(v[i]<0) v[i+1]+=v[i]/10,v[i]%=10;
if(v[i]<0) v[i+1]--,v[i]+=10;
}
while(len&&!v[len]) len--;
}
}ans1,ans2;
void A(cbig &ret,int a,int b)
{
for(int i=a-b+1;i<=a;i++) ret*=i;
}
int main()
{
int i,n,m;
scanf("%d%d",&n,&m);
ans1=cbig(1),A(ans1,n+2,n+2),A(ans1,n+3,m);
ans2=cbig(2),A(ans2,n+1,n+1),A(ans2,n+2,m);
ans1-=ans2;
if(!ans1.len) printf("0");
else for(i=ans1.len;i;i--) printf("%d",ans1.v[i]);
return 0;
}

最新文章

  1. [css]我要用css画幅画(五)
  2. 【WPF系列】基础 PasswordBox
  3. Tomcat笔记
  4. MyEclipse中常用的快捷键大全,快来.....
  5. Winform端上传图片到服务器
  6. iOS 动画 旋转 移动简单代码
  7. Hive DDL DML SQL操作
  8. c++代码模板
  9. 脚本两则--用于快速部署HADOOP,SPARK这些(特别是VM虚拟机模板部署出来的)。。
  10. shape和selector是Android UI设计中经常用到的
  11. activity变成Dialog的步骤
  12. (C语言)共用体union的使用方法举例
  13. DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)
  14. Python爬虫【解析库之pyquery】
  15. MySQL 详细学习笔记 转
  16. [转载] java并发编程:Lock(线程锁)
  17. centos7安装java环境和maven环境
  18. HIVE开发总结
  19. tar 命令 简易使用方法
  20. A Simple Math Problem HDU1757

热门文章

  1. bzoj 2437[Noi2011]兔兔与蛋蛋 黑白染色二分图+博弈+匈牙利新姿势
  2. linux内核之进程的基本概念(进程,进程组,会话关系)
  3. bzero 字符数组清零
  4. C#读取Excel 几种方法的体会
  5. python笔记4:高级特性
  6. Java 基础【06】复合赋值运算
  7. android添加桌面悬浮窗
  8. 2017 [六省联考] T6 寿司餐厅
  9. Springboot 集成 Thymeleaf 及常见错误
  10. ArrayList和LinkedList学习