[luogu2822][组合数问题]
题解:
对于上面和下面的式子进行分解质因数,然后看看上面的质因数个数减去下面的质因数个数能不能达到k的质因数的要求即可。
分解质因数的时候用对于阶乘分解质因数的常用方法:比如要求1999!中能分解出多少个5,那么就把1999不断的除以5,并且把得到的数相加即可。原因显然。
但是上面方法的复杂度是nnt,明显tle,考虑优化。发现当k固定之后,对于每个n和m是固定的,并且似乎是可以转移的。所以考虑预处理。
用c[i][j]表示\(C_i^j\)是不是符合要求。用g[i][j]表示当m为j,n从j到max满足条件的数量。f[i][j]表示n为1到i,m为1到j时满足条件的数量。
然后只要考虑出f[i][j]的转移即可,显然f[i][j]=f[i][j-1]+g[i][j]
然后只要O(1)查询即可,懒得现将询问读入再预处理,所以前面的预处理全都是到2000的。
代码:
#include<cstdio>
#include<iostream>
using namespace std;
const int N=2000+10;
int t,n,m,k,pre[N][10];
int sushu[10]={0,2,3,5,7,11,13,17,19};
int ksushu[10],kjs[10];
void fenk()
{
for(int i=1;i<=8;++i)
{
if(!k) break;
while(k%sushu[i]==0)
{
kjs[i]++;
k/=sushu[i];
}
}
}
inline void work2(int x)
{
for(int i=1;i<=8;++i)
{
int xx=x;
while(xx)
{
xx/=sushu[i];
pre[x][i]+=xx;
}
}
return;
}
int g[N][N],f[N][N],c[N][N];
inline int pd(int x,int y)
{
for(int i=1;i<=8;++i)
if(pre[x][i]-pre[y][i]-pre[x-y][i]<kjs[i]) return 0;
return 1;
}
inline int ps(int x)
{
if(x==2||x==3) return 1;
if(x%6!=5&&x%6!=1) return 0;
for(int i=5;i*i<=x;i+=6)
if(x%(i+2)==0||x%i==0) return 0;
return 1;
}
int main()
{
scanf("%d%d",&t,&k);
fenk();
for(int i=2;i<=2000;++i)
work2(i);
for(int i=1;i<=2000;++i)
for(int j=1;j<=i;++j)
if(pd(i,j))
c[i][j]=1;
for(int j=1;j<=2000;++j)
for(int i=j;i<=2000;++i)
g[i][j]=g[i-1][j]+c[i][j];
for(int i=1;i<=2000;++i)
for(int j=1;j<=i;++j)
f[i][j]=f[i][j-1]+g[i][j];
int x,y;
while(t--)
{
scanf("%d%d",&x,&y);
printf("%d\n",f[x][min(x,y)]);
}
return 0;
}
[luogu2822][组合数问题]的更多相关文章
- $Noip2016/Luogu2822$ 组合数问题
$Luogu$ 看这题题解的时候看到一个好可爱的表情(●'◡'●)ノ♥ $Sol$ 首先注意到这题的模数是$k$.然而$k$并不一定是质数,所以不能用$C_n^m=\frac{n!}{m!(n-m)! ...
- LCM性质 + 组合数 - HDU 5407 CRB and Candies
CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...
- 计算一维组合数的java实现
背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...
- Noip2016提高组 组合数问题problem
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...
- C++单元测试 之 gtest -- 组合数计算.
本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- AC日记——组合数问题 落谷 P2822 noip2016day2T1
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
随机推荐
- php5.6安装Zend Opcache扩展
假设php5.6安装路径为/data2/php[root@nextcloud src]# pwd/usr/local/src[root@nextcloud src]# wget http://pecl ...
- Zookeeper Ephemeral结点使用心得
原文地址:https://www.cnblogs.com/linlemo/p/4807178.html 公司里面在拿Zookeeper做命名服务,通过使用ZK,前端只需要根据指定的ZK地址获得相应的资 ...
- 使用rem进行自适应页面布局
设计师给到我们前端的设计稿一般是按照iphone6屏幕(iphone6 两倍屏 设备 分辨率(物理尺寸) 屏幕宽高 PPI 状态栏高度 导航栏高度 标签栏高度 iPhone6 750×1334 px ...
- PairWork-电梯调度程序结对编程
结对编程人员:050/184 1 结对编程 1.1 结对编程的优缺点 优点: ● 与单独开发相比,结对能够使人们在压力之下保持更好的状态.结对编程鼓励双方保持代码的高质量,即使在出现了让人不得不飞快地 ...
- mysql执行 sql文件遇到USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8错误
使用navcat在导入别人发的mysql数据的时候,报了下面这个错误: [Err] 1064 - You have an error in your SQL syntax; check the man ...
- github使用心得和链接
在本次使用github过程中,刚打开github主界面的时候,吓了一跳,满眼的英文加上各种没用过的命令,真是一个头两个大,废话不多说,下面我就说一下我在使用github过程中遇到的两个问题.: 问题一 ...
- 第三次Sprint-最后冲刺
由于一些原因,导致我和汝婷被退队了.因此我们是从上星期重新开始做系统. 陈汝婷单独负责: 1.用户输入题目数: 2.限制题数: 3.自动生成用户需要题目数的题目: 4.计时 练丽云单独: 1.异常处理 ...
- JavaScript DOM方法表格添加删除
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- SpringMVC @RequestBody的使用
@RequestBody的作用 @RequestBody用于读取Request请求的body数据,然后利用SpringMVC配置的HttpMessageConverter对数据进行转换,最后把转换后的 ...
- CSS实现垂直居中的5种思路
前面的话 相对于水平居中,人们对于垂直居中略显为难,大部分原因是vertical-align不能正确使用.实际上,实现垂直居中也是围绕几个思路展开的.本文将介绍关于垂直居中的5种思路 line-hei ...