博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2729:[HNOI2012]排队(组合数学)
阅读量:5905 次
发布时间:2019-06-19

本文共 3864 字,大约阅读时间需要 12 分钟。

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

Solution

一种情况是两个老师中间只有一个人且这个人是女生。

即$A(n,n)*A(n+1,1)*A(2,2)*A(m,1)*A(n+2,m-1)$

另一种情况是两个老师中间不是只有一个女生,也就是两个老师中间一定有男生。

即$A(n,n)*A(n+1,2)*A(n+3,m)$

Code

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define MAX_L 20005 7 using namespace std; 8 9 class bign 10 { 11 public: 12 int len, s[MAX_L]; 13 bign(); 14 bign(const char*); 15 bign(int); 16 bool sign; 17 string toStr() const; 18 friend istream& operator>>(istream &,bign &); 19 friend ostream& operator<<(ostream &,bign &); 20 bign operator=(const char*); 21 bign operator=(int); 22 bign operator=(const string); 23 bool operator>(const bign &) const; 24 bool operator>=(const bign &) const; 25 bool operator<(const bign &) const; 26 bool operator<=(const bign &) const; 27 bool operator==(const bign &) const; 28 bool operator!=(const bign &) const; 29 bign operator+(const bign &) const; 30 bign operator++(); 31 bign operator++(int); 32 bign operator+=(const bign&); 33 bign operator-(const bign &) const; 34 bign operator--(); 35 bign operator--(int); 36 bign operator-=(const bign&); 37 bign operator*(const bign &)const; 38 bign operator*(const int num)const; 39 bign operator*=(const bign&); 40 bign operator/(const bign&)const; 41 bign operator/=(const bign&); 42 bign operator%(const bign&)const; 43 bign factorial()const; 44 bign Sqrt()const; 45 bign pow(const bign&)const; 46 void clean(); 47 ~bign(); 48 }; 49 50 bign::bign() 51 { 52 memset(s,0,sizeof(s)); 53 len=1; 54 sign=1; 55 } 56 57 bign::bign(const char *num) 58 { 59 *this=num; 60 } 61 62 bign::bign(int num) 63 { 64 *this=num; 65 } 66 67 string bign::toStr() const 68 { 69 string res; 70 res=""; 71 for (int i=0; i
>(istream &in, bign &num) 81 { 82 string str; 83 in>>str; 84 num=str; 85 return in; 86 } 87 88 ostream &operator<<(ostream &out, bign &num) 89 { 90 out<
=0; i--)133 if (s[i]!=num.s[i])134 return sign?(s[i]
(const bign&num)const139 {140 return num<*this;141 }142 143 bool bign::operator<=(const bign&num)const144 {145 return !(*this>num);146 }147 148 bool bign::operator>=(const bign&num)const149 {150 return !(*this
num || *this
= 0) g=0;236 else237 {238 g=1;239 x += 10;240 }241 result.s[result.len++]=x;242 }243 result.clean();244 return result;245 }246 247 bign bign::operator * (const bign &num)const248 {249 bign result;250 result.len=len+num.len;251 252 for (int i=0; i
= 0)293 {294 while (divisor.s[j]==0) j--;295 if (k > j) k=j;296 char z[MAX_L];297 memset(z, 0, sizeof(z));298 for (int i=j; i >= k; i--)299 z[j-i]=divisor.s[i]+'0';300 bign dividend=z;301 if (dividend
1 && s[len-1]=='\0')357 len--;358 }359 360 bign bign::Sqrt()const361 {362 if(*this<0)return -1;363 if(*this<=1)return *this;364 bign l=0,r=*this,mid;365 while(r-l>1)366 {367 mid=(l+r)/2;368 if(mid*mid>*this) r=mid;369 else l=mid;370 }371 return l;372 }373 374 bign::~bign()375 {376 }377 378 bign A(int n,int m)379 {380 bign ans;381 ans=1;382 for (int i=n-m+1; i<=n; ++i) ans*=i;383 return ans;384 }385 386 int n,m; 387 388 int main()389 {390 scanf("%d%d",&n,&m);391 bign ans=A(n,n)*A(n+1,2)*A(n+3,m)+A(n,n)*A(n+1,1)*A(2,2)*A(m,1)*A(n+2,m-1);392 cout<

转载于:https://www.cnblogs.com/refun/p/10086487.html

你可能感兴趣的文章
扩展 DbUtility (1)
查看>>
iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
查看>>
Hadoop学习笔记系列文章导航
查看>>
SpringMVC中ModelAndView addObject()设置的值jsp取不到的问题
查看>>
Prometheus : 入门
查看>>
使用 PowerShell 创建和修改 ExpressRoute 线路
查看>>
在C#中获取如PHP函数time()一样的时间戳
查看>>
Redis List数据类型
查看>>
大数据项目实践(四)——之Hive配置
查看>>
初学vue2.0-组件-文档理解笔记v1.0
查看>>
Centos7安装Gitlab10.0
查看>>
上传图片预览
查看>>
lagp,lacp详解
查看>>
LVS之DR模式原理与实践
查看>>
Docker的系统资源限制及验证
查看>>
c++ ios_base register_callback方法使用
查看>>
Java中为什么需要Object类,Object类为什么是所有类的父类
查看>>
angularjs-paste-upload
查看>>
linux基础命令 head
查看>>
objective c:import和include的区别, ""和<>区别
查看>>