車(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. 使用python模拟cookie登陆wooyun

    import urllib2 class SimpleCookieHandler(urllib2.BaseHandler): def http_request(self, req): simple_c ...

  2. x+2y+3z=n非负整数解

    #include <iostream> #include <string.h> #include <stdio.h> using namespace std; ty ...

  3. 产生式模型(生成式模型)与判别式模型<转载>

    转自http://dongzipnf.blog.sohu.com/189983746.html 产生式模型与判别式模型 产生式模型(Generative Model)与判别式模型(Discrimiti ...

  4. zust_第二周——瞎扯系列

    首先来原题列表: A:Gridland http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1037 B:HangOver htt ...

  5. ratio_to_report分析函数求占比

    drop table test; create table test ( name varchar(20), kemu varchar(20), score number  ); insert int ...

  6. iBeacon技术

    声明:部分资料来源自互联网 前言 iBeacon 最早推出是在今年的苹果 WWDC 大会上.作为 iOS 7 的一部分,它吸引人的一点是,iBeacon 是一种开发标准——绝大多数智能手机支持蓝牙 4 ...

  7. ubuntu命令行卸载并清理软件

    卸载软件,可以使用下面这两种方式之一: sudo apt-get remove --purge [software name] sudo apt-get autoremove --purge [sof ...

  8. Linux内核——进程管理之CFS调度器(基于版本4.x)

    <奔跑吧linux内核>3.2笔记,不足之处还望大家批评指正 建议阅读博文https://www.cnblogs.com/openix/p/3262217.html理解linux cfs调 ...

  9. jsDate()

    var myTime=new Date();//myTime的数据类型为(typeof) object //下面得到的都为number 类型 getFullYear();年 四位数字返回年份. get ...

  10. leepcode - 5-16

    7.有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注 ...