車(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的更多相关文章

  1. 济南学习 Day 4 T2 am

    LYK 与实验室(lab)Time Limit:5000ms Memory Limit:64MB题目描述LYK 在一幢大楼里,这幢大楼共有 n 层,LYK 初始时在第 a 层上.这幢大楼有一个秘密实验 ...

  2. 济南学习 Day 3 T2 pm

    LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB题目描述LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在(n, ...

  3. 济南学习 Day 3 T2 am

    看程序写结果(program)Time Limit:1000ms Memory Limit:64MB题目描述LYK 最近在准备 NOIP2017 的初赛,它最不擅长的就是看程序写结果了,因此它拼命地在 ...

  4. 济南学习 Day 2 T2 pm

    她[问题描述]给你L,R,S,M,求满足L≤ (S × x) mod M ≤ R最小的正整数 X.[输入格式]第一行一个数T代表数据组数.接下来一行每行四个数代表该组数据的L,R,S,M.[输出格式] ...

  5. 济南学习 Day 1 T2 am

    死亡[问题描述]现在有M个位置可以打 sif,有N +1个人在排队等着打 sif.现在告诉你 个人每个人需要多长的时间打 sif,问你第N +1个人什么时候才能打 sif. (前N个人必须按照顺序来) ...

  6. 济南学习 Day 5 T2 晚

    等比数列(sequence) [题目描述] 判断一个数列是否为等比数列. 等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0. [输入说明] 输入文件的第一行有一个 ...

  7. 济南学习 Day 5 T2 pm

    逆欧拉函数(arc)题目描述:已知phi(N),求N.输入说明:两个正整数,分别表示phi(N)和K.输出说明:按升序输出满足条件的最小的K个N.样例输入:8 4杨丽输出:15 16 20 24数据范 ...

  8. 济南学习 Day2 T2 am

    [问题描述]有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[l,r]中则你比较厉害.求你比较厉害的概率.[输入格式]第一行有三个数N,l,r,含义如上描述.接下来一行有

  9. 济南学习 Day1 T2 pm

    [问题描述]栈是一种强大的数据结构,它的一种特殊功能是对数组进行排序.例如,借助一个栈,依次将数组 1,3,2 按顺序入栈或出栈,可对其从大到小排序:1 入栈:3 入栈:3 出栈:2 入栈:2 出栈: ...

随机推荐

  1. 如何让浏览器关闭后session失效

    llzzcc66 知道合伙人数码行家 推荐于2018-08-10   如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如 ...

  2. html5文本超过指定行数隐藏显示省略号

    这个很简单,直接贴代码就好了 HTML <span class="name">博客园是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯 ...

  3. Latex 分块矩阵的处理

    在 \(\mathrm{\LaTeX}\) 中,如果想输入类似的矩阵: 可以这样实现: \[ \left[ \begin{array}{cc|cc|c} \lambda & 0 & 1 ...

  4. Linux文件的IO操作 一

    系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

  5. shell脚本,检查给出的字符串是否为回文

    [root@localhost wyb]# .sh #!/bin/bash #检查给出的字符串是否为回文 read -p "Please input a String:" numb ...

  6. OmniFocus

    褪墨・时间管理 “把所有事情都从你的脑袋里弄出来.在事情出现就做好相关行动的一系列决定,而不是在事情爆发的时候.以合适的类别组织好你的项目的各种提醒以及下一步行动.保持你的系统更新和完整,及时进行回顾 ...

  7. ios 自定义RadioButton

    1 前言 众所周知在IOS中没有单选按钮这一控件,今天我们来学习一下简单的单选控件.类似与Web中的radio表单元素. 2 详述 本控件单纯的利用按钮控件和NSObject的respondsToSe ...

  8. PHP获取文件后缀的7中方法

    在日常的工作当中我们避免不了要经常获取文件的后缀名,今天我就整理了一下7种获取文件后缀的方法,希望对大家有所帮助. $url = 'http://www.baidu.com/uploads/20185 ...

  9. Linux-MySQL基本命令-SQL语句

    服务端命令SQL 在数据库系统中,SQL语句不区分大小写(建议用大写) SQL语句可单行或多行书写,以“;”结尾 关键词不能跨多行或简写 用空格和缩进来提高语句的可读性 子句通常位于独立行,便 ...

  10. cvs 文件无法上传debug

    当时文件始终上传不成功时(一般先update后commit): cvs update filename report:move away filename ,it is in the way cvs ...