codevs 1994 排队 排列组合+高精度
/*
数学题0.0
最后答案:A(n,n)*A(n+1,2)*A(n+3,m)+A(n,n)*C(m,1)*A(2,2)*C(n+1,1)*A(n+2,m-1);
简单解释一下
+之前的很显然 先排男生 然后老师插空 然后女生插空 显然符合条件
但仔细一想会发现少算了一部分 就是 老师 女生 老师 的情况
在单独考虑着一种 先选夹在中间的女生(C(m,1)) 然后老师换位置 A(2,2)
然后安排这个(C(n+1,1)) 然后剩下的女生插空
注意不能把 老师 女生 老师 和其他女生看成一样的 因为这个具有特殊性
然后就是高精了 最简单的 连压位都不用
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int n,m,a[],b[],c[],ans[],l1,l2,l;
void get_na()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=l1;j++)
a[j]=a[j]*i;
for(int j=;j<=l1;j++)
if(a[j]>=)
{
a[j+]+=a[j]/;
a[j]=a[j]%;
}
while(a[l1+])
{
l1++;
a[l1+]+=a[l1]/;
a[l1]=a[l1]%;
}
}
}
void get_nb()
{
for(int i=;i<=l1;i++)
b[i]=a[i];
l2=l1;
}
void Mul1(int x)
{
for(int i=;i<=l1;i++)
a[i]=a[i]*x;
for(int i=;i<=l1;i++)
if(a[i]>=)
{
a[i+]+=a[i]/;
a[i]=a[i]%;
}
while(a[l1+])
{
l1++;
a[l1+]+=a[l1]/;
a[l1]=a[l1]%;
}
}
void Mul2(int x)
{
for(int i=;i<=l2;i++)
b[i]=b[i]*x;
for(int i=;i<=l2;i++)
if(b[i]>=)
{
b[i+]+=b[i]/;
b[i]=b[i]%;
}
while(b[l2+])
{
l2++;
b[l2+]+=b[l2]/;
b[l2]=b[l2]%;
}
}
void Add()
{
l=max(l1,l2);
for(int i=;i<=l;i++)
c[i]=a[i]+b[i];
for(int i=;i<=l;i++)
if(c[i]>)
{
c[i+]++;c[i]=c[i]%;
}
while(c[l+])l++;
}
int main()
{
scanf("%d%d",&n,&m);
a[]=;l1=;
b[]=;l2=;
get_na();
get_nb();
Mul1(n);
Mul1(n+);
for(int i=n+;i>=n+-m+;i--)
Mul1(i);
Mul2(*m);
Mul2(n+);
for(int i=n+;i>=n+-m++;i--)
Mul2(i);
Add();
for(int i=l;i>=;i--)
printf("%d",c[i]);
return ;
}
codevs 1994 排队 排列组合+高精度的更多相关文章
- BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...
- Cogs 604.方程(排列组合+高精度)
方程 ★☆ 输入文件:equationz.in 输出文件:equationz.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] hyc 碰到了一个难题,请你来帮忙解决. 对于不 ...
- 【noi 2.6_9288】&【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度除法)
题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变 ...
- ACM~排列组合&&hdu例子
排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式 P(n ...
- [BZOJ1005]Prufer数列+排列组合
一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应 ...
- BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合
1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
随机推荐
- 最新发布C#.NET快速开发框架企业版V4.0 (适合开发ERP、进销存系统)
C/S系统开发框架-企业版 V4.0 (Enterprise Edition) http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度网盘: ...
- 如何用extjs显示一个已经存在的页面
最近碰到了一个需求: 画面上有个按钮,点击了按钮之后,弹出一个窗体(window),而该窗体(window)上显示的内容是某个系统的内容,如下图所示 查了好长时间的extjs的帮助文档,没有找个现成的 ...
- c++ 顺序容器学习 - 容器适配器
摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一 ...
- GNU 网络程序
______________________________________________________________________________ | 版权声明 | | 1.本文可以转载.修 ...
- [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】
题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...
- 自动垂直居中的js
var _htmlheight; function start(){ _htmlheight=document.body.scrollHeight; resize(); /*$("#copy ...
- 延长FLASH和EEPROM芯片写入次数的小方法
开发电子产品时,常常需要断电后保存某些数据,这就需要使用 FLASH或EEPROM芯片,这两种芯片,可擦除的次数是有限制的,通常FLASH为10万次,EEPROM要多一点,为100万甚至1000万次. ...
- Java NIO API详解
在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API.对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端 ...
- js eval()函数 接收一个字符串,做为js代码来执行。 如: s='var d="kaka"'; 或者s=‘function (code){return code }’;
eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要特别注意的是对象声明语法“{}”并不能返回一个值, ...
- Linux下高并发网络编程
Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...