济南学习 Day 5 T2 am
車(Rook)
【题目描述】
众所周知,車是中国象棋最厉害的棋子之一,他能吃到同一行或者同一列的其他棋子。車显然不能和車在一打起来,于是rly有借来了许多许多車在棋盘上摆了起来......
他想知道,在n*m的棋盘上摆放最多个数的車并且使它们不能相互吃到的情况下方案数有几种。但是,由于上次摆炮摆的太累了,这次他又增加了条件,对于任何一个車A,
如果有其他的車B在它上面,(車B行号小于車A),那么車A必须在車B的右边(車A的列号大于車B)。棋子都是相同的。
【输入说明】
一行,两个正整数N和M。
【输出说明】
一行,输出方案数的末尾50位(不足则直接输出)。
【样例输入】
2 2
【样例输出】
1
【数据范围】
对于20%的数据,N<=10,M<=10。
对于40%的数据,N<=40,M<=40。
对于70%的数据,N<=10000,M<=10000。
对于100%的数据,N<=1000000,M<=1000000。
我们再来科普一下:
排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数。 排列组合与古典概率论关系密切。
C(n,m)=A(n,m)/m!=n!/((n-m)!*m!)(假设n>=M)(从n个数字中选取m个不考虑顺序他的选择方案)
#include<iostream>
#include<cstring>
#include<cstdio>
#define N 1000010
#define M 101
using namespace std;
int n,m,num,f[N],c[N],p[N],prime[N];
int a1[M],b1[M],c1[N];
struct node{
node()
{
memset(q,,sizeof q );len=;
}
int q[M],len;
};node ans;
void prepare()
{
for(int i=;i<=n;i++)
{
if(!f[i])
{
prime[++num]=i;p[i]=num;
for(int j=;i*j<=m;j++)
f[i*j]=;
}
}
}
void work1(int x)
{
for(int i=;i<=num;i++)
{
while(x%prime[i]==) c[i]++,x/=prime[i];
if(!f[x]){ c[p[x]]++;break; }
if(x==) break;
}
}
void work2(int x)
{
for(int i=;i<=num;i++)
{
while(x%prime[i]==) c[i]--,x%=prime[i];
if(!f[x]){ c[p[x]]--;break; }
if(x==) break;
}
}
node cheng(node a,int b)
{
memset(a1,,sizeof a1 );
memset(b1,,sizeof b1 );
node c;
int len=a.len;
for(int i=;i<=a.len;i++) a1[i]=a.q[len-i]+;
for(int i=;i<=len;i++)
{
b1[i]+=a1[i]*b;
b1[i+]+=b1[i]/;
b1[i]%=;
}
if(b1[len+]) len++;
c.len=min(,len);
for(int i=;i<=c.len;i++)
c.q[i]=b1[c.len-i+];
return c;
}
int main()
{
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);
prepare();
for(int i=m;i>=m-n+;i--)
work1(i);
for(int i=;i<=n;i++)
work2(i);
ans.len=;ans.q[]=;
for(int i=;i<=num;i++)
for(int j=;j<=c[i];j++)
ans=cheng(ans,prime[i]);
for(int i=max(,ans.len-);i<=ans.len;i++)
printf("%d",ans.q[i]); return ;
}
济南学习 Day 5 T2 am的更多相关文章
- 济南学习 Day 4 T2 am
LYK 与实验室(lab)Time Limit:5000ms Memory Limit:64MB题目描述LYK 在一幢大楼里,这幢大楼共有 n 层,LYK 初始时在第 a 层上.这幢大楼有一个秘密实验 ...
- 济南学习 Day 3 T2 pm
LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB题目描述LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在(n, ...
- 济南学习 Day 3 T2 am
看程序写结果(program)Time Limit:1000ms Memory Limit:64MB题目描述LYK 最近在准备 NOIP2017 的初赛,它最不擅长的就是看程序写结果了,因此它拼命地在 ...
- 济南学习 Day 2 T2 pm
她[问题描述]给你L,R,S,M,求满足L≤ (S × x) mod M ≤ R最小的正整数 X.[输入格式]第一行一个数T代表数据组数.接下来一行每行四个数代表该组数据的L,R,S,M.[输出格式] ...
- 济南学习 Day 1 T2 am
死亡[问题描述]现在有M个位置可以打 sif,有N +1个人在排队等着打 sif.现在告诉你 个人每个人需要多长的时间打 sif,问你第N +1个人什么时候才能打 sif. (前N个人必须按照顺序来) ...
- 济南学习 Day 5 T2 晚
等比数列(sequence) [题目描述] 判断一个数列是否为等比数列. 等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0. [输入说明] 输入文件的第一行有一个 ...
- 济南学习 Day 5 T2 pm
逆欧拉函数(arc)题目描述:已知phi(N),求N.输入说明:两个正整数,分别表示phi(N)和K.输出说明:按升序输出满足条件的最小的K个N.样例输入:8 4杨丽输出:15 16 20 24数据范 ...
- 济南学习 Day2 T2 am
[问题描述]有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[l,r]中则你比较厉害.求你比较厉害的概率.[输入格式]第一行有三个数N,l,r,含义如上描述.接下来一行有
- 济南学习 Day1 T2 pm
[问题描述]栈是一种强大的数据结构,它的一种特殊功能是对数组进行排序.例如,借助一个栈,依次将数组 1,3,2 按顺序入栈或出栈,可对其从大到小排序:1 入栈:3 入栈:3 出栈:2 入栈:2 出栈: ...
随机推荐
- struts2默认拦截器defaultStack
第一次使用Struts2.3.20,前台页面向后台传值,怎么总是提示值为null,查找半天原来是struts配置文件的action中忘记引入defaultStack拦截器了,所以即使Action中万事 ...
- CF 1119F Niyaz and Small Degrees
打VP的时候由于CXR和XRY切题太快了导致我只能去写后面的题了 然而VP的时候大概还有一小时时想出了\(O(n^2\log n)\)的暴力,然后过了二十分钟才想到删点的优化 结果细节很多当然是写不出 ...
- CAD交互绘制圆形云线批注(网页版)
js中实现代码说明: 动态拖放时的绘制事件: function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGui ...
- What is the difference between try/except and assert?
assert only check if a condition is true or not and throw an exception. A try/except block can run a ...
- ASP.NET 开发人员不必担心 Node 的五大理由
哦别误会……我真的很喜欢 Node,而且我觉得它提出的概念和模式将在很长一段时间内,对服务端 Web 编程产生深远的影响.即使随着时间的推移 Node 过气了,我们肯定可以从下一个牛逼玩意身上或多或少 ...
- UIViewAnimationOptions
常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:执行UIView动画时,自动更新Subview的Layout约束.. UIView ...
- c++ 将输入存储到数组,然后反转数组,最后输出
// 输入一个包含多个double元素的数组,先打印结果,然后反转出头和尾元素之外的所有元素,最后再打印结果 #include <iostream> using namespace std ...
- Java--容器/集合类(Collection)理解和使用
.数组和集合的比较 数组:长度固定,用来存放基本类型的数据 集合:长度不固定,用来存放对象的引用 二.集合类的基本概念 1.java.util包中提供了一些集合类,这些集合类也被称为容器. 常用的集合 ...
- mysql slow 分析工具
慢查询有什么用? 它能记录下所有执行超过long_query_time时间的SQL语句,帮你找到执行慢的SQL,方便我们对这些SQL进行优化. 测试用 MySQL 版本. Serv ...
- PHP-redis命令之 字符串 (strings)
一.string (字符串) 1.set:设置键 $reids->set('mykey',111); 2.get:获取键 $redis->get('mykey'); 3.del:删除键 $ ...