Description

众所周知,車是中国象棋中最厉害的一子之一,它能吃到同一行或同一列中的其他棋子。車跟車显然不能在一起打起来,于是rly一天又借来了许多许多的車在棋盘上摆了起来……他想知道,在N×M的矩形方格中摆最多个数的車使其互不吃到的情况下方案数有几种。
但是,由于上次摆炮摆得实在太累,他为了偷懒,打算增加一个条件:对于任何一个車A,如果有其他一个車B在它的上面(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)。棋子都是相同的。

Input

一行,两个正整数N和M。
N<=1000000,M<=1000000

Output

一行,输出方案数的末尾50位(不足则直接输出)。

Sample Input

2 2

Sample Output

1

Solution

用我的生日对BZOJ总题数取模然后找到了这个题……
显然答案就是$C(max(n,m),min(n,m))$。用欧拉筛加速质因数分解就可以了。
一开始没算复杂度裸上了一个高精然后T成狗……

Code

 #include<iostream>
#include<cstdio>
#define N (1000009)
using namespace std; int n,m,cnt,prime[N],Keg[N],d[N]; struct bign
{
int a[];
bign operator * (const int &b) const
{
bign c;
for (int i=; i<=; ++i) c.a[i]=;
for (int i=; i<=; ++i)
{
c.a[i]+=a[i]*b;
c.a[i+]+=c.a[i]/;
c.a[i]%=;
}
return c;
}
}ans; void Euler()
{
for (int i=; i<=n; ++i)
{
if (!d[i]){d[i]=i; prime[++cnt]=i;}
for (int j=; j<=cnt && i*prime[j]<=n; ++j)
{
d[i*prime[j]]=prime[j];
if (i%prime[j]==) break;
}
}
} void Divide(int x,int opt)
{
while (x!=) Keg[d[x]]+=opt, x/=d[x];
} int main()
{
scanf("%d%d",&n,&m);
if (n<m) swap(n,m);
Euler();
for (int i=; i<=n-m; ++i) Divide(i,-);
for (int i=m+; i<=n; ++i) Divide(i,); ans.a[]=;
for(int i=;i<=n;i++)
for(int j=;j<=Keg[i];j++)
ans=ans*i; int len=;
while (ans.a[len]==) --len;
for (int i=len; i>=; --i)
printf("%d",ans.a[i]);
}

BZOJ4807:車(组合数学,高精度)的更多相关文章

  1. 【bzoj2729】[HNOI2012]排队 组合数学+高精度

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

  2. BZOJ2729 HNOI2012排队(组合数学+高精度)

    组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...

  3. bzoj4807 車

    题目大意: Description 众所周知,車是中国象棋中最厉害的一子之一,它能吃到同一行或同一列中的其他棋子.車跟車显然不能在一起打 起来,于是rly一天又借来了许多许多的車在棋盘上摆了起来……他 ...

  4. BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5786  Solved: 2263[Submit][Stat ...

  5. UVa 1639 Candy (数学期望+组合数学+高精度存储)

    题意:有两个盒子各有n个糖,每次随机选一个(概率分别为p,1-p),然后吃掉,直到有一次,你打开盒子发现,没糖了! 输入n,p,求另一个盒子里糖的个数的数学期望. 析:先不说这个题多坑,首先要用lon ...

  6. BZOJ 1005 明明的烦恼 Prufer序列+组合数学+高精度

    题目大意:给定一棵n个节点的树的节点的度数.当中一些度数无限制,求能够生成多少种树 Prufer序列 把一棵树进行下面操作: 1.找到编号最小的叶节点.删除这个节点,然后与这个叶节点相连的点计入序列 ...

  7. BZOJ 4807 車 组合数学

    思路:高精度\((what)\) 提交:2次(后来发现有种更快的写法) 题解: 设\(n>m\),那么显然答案为\(C(n,m)\),相当于只能放\(m\)个棋子,可以在\(n\)列中选任意不同 ...

  8. BZOJ 1005: [HNOI2008]明明的烦恼( 组合数学 + 高精度 )

    首先要知道一种prufer数列的东西...一个prufer数列和一颗树对应..然后树上一个点的度数-1是这个点在prufer数列中出现次数..这样就转成一个排列组合的问题了.算个可重集的排列数和组合数 ...

  9. JZYZOJ1544 [haoi2016T2]放棋子 错排公式 组合数学 高精度

    http://172.20.6.3/Problem_Show.asp?ID=1544&a=ProbNF 看了题解才意识到原题有错排的性质(开始根本不知道错排是什么). 十本不同的书放在书架上. ...

随机推荐

  1. HTML5--(1)兼容前缀+结构性标签+语义化标签

    一.兼容前缀+兼容写法 兼容前缀 1.HTML5有部分类容兼容到IE9,IE8及以下完全不兼容的内容不再考虑. 2.部分内容需要加兼容前缀 a)     -webkit- 兼容谷歌 b)     -m ...

  2. C# 之程序退出的方法

    1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit();  强制所有消息中 ...

  3. Java中多个集合的交集,并集和差集

    一.交集 java中交集使用 A.retainAll(B) ,交集的结果在集合A中. import org.junit.Test; import java.util.HashSet; import j ...

  4. 运行javac编译报错:仅当显式请求注释处理时才接受类名称“xxxxxx”

    发生原因:运行javac编译时没有加上扩展名.解决方法:加上.java扩展名重新编译即可,"xxxxxx.java".

  5. Spring_Spring与AOP_AspectJ基于XML的实现

    一.前置通知 import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.as ...

  6. spss C# 二次开发 学习笔记(二)——Spss以及统计术语解释(IT人眼中的统计术语)

    针对客户需求,需要对一些数据做统计分析.统计分析的第一步,即为数据查询,查找出要统计分析的数据. 查询得出的是一个行列表格的结果集,行.列.表格等这些IT的数据库概念和Spss以及统计中的术语是如何对 ...

  7. IIS6.0+PHP5.3+mssql 配置及远程连接数据库

    安装软件需求:IIS6.0.php5.3 .sqlsrv驱动.sql server ODBC驱动  所有软件压缩包下载 注意看:安装软件的环境需求,根据环境自行选择版本,例如odbc驱动老一点版本才能 ...

  8. 03:成绩排序 个人博客:doubleq.win

    个人博客:doubleq.win 03:成绩排序 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出 ...

  9. 几种常用的bootstrap功能。

    ---恢复内容开始--- 我对于bootstrap定义与一种插件,他可以使我们的网页布局更加的炫酷,更加的整洁和合理.他的优点不多说,缺点一个就够我们头疼的,那就是需要记一些长长的英文名. 我为大家说 ...

  10. mysql存储过程模板

    CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_test`(IN `nodeCode` varchar(100),IN `id` varchar(36) ...