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年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
随机推荐
- macOS 自动修改mac地址脚本
介于 某公众号提供了通过修改mac地址来链接BUPT_mobile 的推送,上网上查了一下咋写脚本,实现一键修改mac地址的功能 网上有自动修改mac地址的程序,但是很坑爹的要收费,所以不如自力更生写 ...
- python django 自定义 装饰器
# -*-coding:utf-8-*- __author__ = "GILANG (pleasurelong@foxmail.com)" """ d ...
- Tornado的一个开源社区
https://link.zhihu.com/?target=http%3A//www.tornadoweb.org/en/stable/ 基于Tornado的一个开源社区 GitHub - shiy ...
- Infinite Scroll–无限分页
一.前言 现在有很多网站都有这样的交互 1.当你往下浏览页面时,页面会自动去异步加载数据. 无限分页效果 infinite scroll 效果图 –ifxoxo.com 2.在页面下方有一个“点击加载 ...
- java 动态代理学习(Proxy,InvocationHandler)
前几天看到java的动态代理机制,不知道是啥玩意,然后看了看.死活不知道 invoke(Object proxy, Method m, Object[] args)种的proxy是个什么东西,放在这里 ...
- zabbix 添加jvm监控
1. zabbix 服务端安装,监控jmx 需要--enable-java zabbix 客户端不需要 --enable-java 2.zabbix_server端安装jdk 安装jdk [root@ ...
- 【HDOJ】3459 Rubik 2×2×2
模拟+DFS. /* 3459 */ #include <cstdio> #include <cstring> #include <cstdlib> #define ...
- java学习面向对象值static
讲完了this这个关键字,我们继续前进,这节我们讲另外一个比较重要的东东,java当中的static,在main函数前面这个家伙都在那里一直挺着,你瞅见了么,你就不好奇么,你就不想知道他杵在那里做什么 ...
- Light OJ 1021 - Painful Bases(状态压缩DP)
题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...
- Contains Duplicate III —— LeetCode
Given an array of integers, find out whether there are two distinct indices i and j in the array suc ...