[HNOI2012]排队
题目描述
某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)
输入输出格式
输入格式:
只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述。 对于 30%的数据 n<=100,m<=100 对于 100%的数据 n<=2000,m<=2000
输出格式:
输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数。注意答案可能很大。
输入输出样例
1 1
12
考虑将老师和女生放到男生中间(注意这道题每个人不一样)
男生排列方案:A(n,n)
现在有n+1个间隔,要将2个老师放入:A(n+1,2)
现在产生了n+3个间隔,将m个女生放入:A(n+3,m) 但是我们忽略了一种方案
我们算的是将老师分别放到男生中间,也就是说,隔开老师的必有一个男生
实际上可以只放一个女生
把2个老师和1个女生和为一块,放入男生中方案:n+1
放剩下的女生:A(n+2,m-1)
选出1个女生:C(m,1)
老师排列方案:A(2,2)=2
男生排列方案:A(n,n)
所以ans=A(n,n)*A(n+1,2)*A(n+3,m)+(n+1)*A(n+2,m-1)*C(m,1)*A(n,n)*2
因为不取模,所以必须要高精度
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int ans1[],ans2[],ans[],len1,len2,len;
int n,m;
void calc1(int x)
{int i;
for (i=;i<=len1;i++)
{
ans1[i]*=x;
}
for (i=;i<=len1;i++)
if (ans1[i]>=)
{
ans1[i+]+=ans1[i]/;
ans1[i]%=;
}
while (ans1[len1+])
{
len1++;
if (ans1[len1]>=)
{
ans1[len1+]+=ans1[len1]/;
ans1[len1]%=;
}
}
}
void calc2(int x)
{int i;
for (i=;i<=len2;i++)
{
ans2[i]*=x;
}
for (i=;i<=len2;i++)
if (ans2[i]>=)
{
ans2[i+]+=ans2[i]/;
ans2[i]%=;
}
while (ans2[len2+])
{
len2++;
if (ans2[len2]>=)
{
ans2[len2+]+=ans2[len2]/;
ans2[len2]%=;
}
}
}
void add()
{int i;
len=max(len1,len2);
for (i=;i<=len;i++)
ans[i]=ans1[i]+ans2[i];
for (i=;i<=len;i++)
if (ans[i]>=)
{
ans[i+]+=ans[i]/;
ans[i]%=;
}
while (ans[len+])
{len++;
if (ans[len]>=)
{
ans[len+]+=ans[len]/;
ans[len]%=;
}
}
}
int main()
{int i;
cin>>n>>m;
ans1[]=;len1=;
for (i=;i<=n;i++)
calc1(i);
calc1(n+);calc1(n);
for (i=n+;i>=n+-m;i--)
calc1(i); ans2[]=;len2=;
calc2(n+);
for (i=n+;i>=n+-m;i--)
calc2(i);
calc2(m);
for (i=;i<=n;i++)
calc2(i);
calc2();
add();
for (i=len;i>=;i--)
printf("%d",ans[i]);
}
[HNOI2012]排队的更多相关文章
- bzoj 2729: [HNOI2012]排队
2729: [HNOI2012]排队 Time Limit: 10 Sec Memory Limit: 128 MB Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体 ...
- 2729: [HNOI2012]排队
2729: [HNOI2012]排队 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 957 Solved: 449[Submit][Status] ...
- 【BZOJ2729】[HNOI2012]排队 组合数
[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...
- 2729:[HNOI2012]排队 - BZOJ
题目描述 Description某中学有n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人 ...
- BZOJ2729:[HNOI2012]排队(组合数学)
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- P3223 [HNOI2012]排队
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输 ...
- 洛谷 P3223 [HNOI2012]排队
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输 ...
- Luogu P3223 [HNOI2012]排队 组合
本来做了一道 P4901 排队 后来发现自己做错题了...到也都是数学qwq 这题最恶心的就是两只(雾)老师. 那我们分类讨论: 1.两个老师之间是男生: $ A(n,n)*A(n+1,2)*A(n ...
- 【bzoj2729】[HNOI2012]排队 组合数学+高精度
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入 ...
随机推荐
- 20162330 实验三 《敏捷开发与XP实践》 实验报告
2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验三 <敏捷开发与XP实践> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1623班 ...
- 2018年3月份的PTA(一)
写程序证明p++等价于(p)++还是等价于(p++)? 由程序说明p++等价于(p)++,因为(p++)在程序中是没有地址的,而输出中p++和(p)++的地址不同是由于在线C语言开发环境地址是动态的 ...
- codves 3044 矩形面积求并
codves 3044 矩形面积求并 题目等级 : 钻石 Diamond 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Desc ...
- 记一次向maven中央仓库提交依赖包
Maven是Java中最常用的依赖管理工具,Maven的中央仓库保罗万象,涵盖了各个领域的框架.工具和文档,也是Java生态强大生命力的体现.我们自己开发的一些有用有趣的代码也可以通过打包上传到mav ...
- AngularJS1.X学习笔记11-服务
如果我没记错的话,spring里边有个service层.什么是服务呢?个人理解就是很多地方要用的,可以跨越控制器甚至是跨越模块的工具.AngularJS也为我们提供了服务这种机制,这让我们可以将一些不 ...
- Docker学习笔记 - Docker数据卷的备份和还原
学习目标: 备份数据卷 还原数据卷 # 通过容器备份数据卷容器中的数据卷 docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt10 ...
- tensorflow让程序学习到函数y = ax + b中a和b的值
今天我们通过tensorflow来实现一个简单的小例子: 假如我定义一个一元一次函数y = 0.1x + 0.3,然后我在程序中定义两个变量 Weight 和 biases 怎么让我的这两个变量自己学 ...
- Ionic 2 开发(一)_安装与目录结构
由于公司开始使用后ionic 进行前段开发,现在需要学习下ionic,虽然是后台开发,但是还是有必要了解下的 安装Node.js 官网:http://nodejs.cn/ 自行下载安装 安装Ionic ...
- C语言的一些输出格式
%e printf()的一种输出格式 科学表示的一种浮点数 1.24==1.240000e+000 1240000==1.240000e+006 ...
- qt中文乱码
刚开始学习qt,经常会遇到中文输出乱码,在网上找了解决办法有下面这个两个办法QTextCodec::setCodecForCStrings(QTextCodec::codecForName(" ...