【jzoj4906】【NOIP2016提高组】【组合数问题】【数论】
来源:互联网 发布:古典气质知乎 编辑:程序博客网 时间:2024/05/17 01:43
题目大意
解题思路
可以用杨辉三角求解组合数,再用前缀和求解答案。因为我比较蠢,所以我就分解质因数,但是实际上只要对k取模就可以了。
code
#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define LD double#define LL long long#define max(x,y) ((x>y)?x:y)#define min(x,y) ((x<y)?x:y)#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)using namespace std;int const maxn=2000;int t,K,n,m,f[maxn+10][20],g[maxn+10][maxn+10],ss[9]={8,2,3,5,7,11,13,17,19},inf=1e9;int main(){ freopen("problem.in","r",stdin); freopen("problem.out","w",stdout); scanf("%d%d",&t,&K); int ii; fo(i,1,maxn){ ii=i; fo(j,1,8){ f[i][j]=f[i-1][j]; while(ii%ss[j]==0){ f[i][j]++; ii/=ss[j]; } } } int kk,cnt,tmp; fo(i,1,maxn){ fo(j,1,i){ g[i][j]=g[i-1][j]+g[i][j-1]-g[i-1][j-1]; kk=K;tmp=inf; fo(k,1,8){ cnt=0; while(kk%ss[k]==0){ cnt++; kk/=ss[k]; } if(cnt)tmp=min(tmp,(f[i][k]-f[j][k]-f[i-j][k])/cnt); } if((tmp!=inf)&&(tmp>0))g[i][j]++; } fo(j,i+1,maxn) g[i][j]=g[i-1][j]+g[i][j-1]-g[i-1][j-1]; } int n,m; fo(i,1,t){ scanf("%d%d",&n,&m); printf("%d\n",g[n][m]); } return 0;}
0 0
- 【jzoj4906】【NOIP2016提高组】【组合数问题】【数论】
- Jzoj4906 组合数问题
- [NOIP2016提高组]D2T1:组合数问题
- NOIP2016提高组复赛day2 组合数问题
- 【NOIP2016提高组复赛官】组合数问题
- NOIP2016 提高组Day2 T1 组合数问题
- 解题报告 Noip2016提高组 组合数问题
- [NOIP2016] 组合数问题
- NOIP2016组合数问题
- noip2016组合数问题
- NOIP2016组合数问题
- [NOIP2016]组合数问题
- 组合数问题(NOIP2016)
- NOIP2016 组合数问题
- Noip2016 组合数问题
- noip2016组合数问题
- C++ & Pascal & Java ——NOIP2016提高组day2 t1——组合数问题
- NOIP2016 Day2T1 组合数问题
- MySQL使用总结
- c++ vector
- OCP11G 051 第169题
- Redis3集群搭建
- What's the WAR
- 【jzoj4906】【NOIP2016提高组】【组合数问题】【数论】
- layer mobile的使用问题
- java入门2-语言基础之关键字,标识符,注释,常量和变量
- 11月英语总结
- 算法竞赛入门经典 例题 6-12 油田(Oil Deposits, UVa 572)
- javaweb开发要学习的所有技术和框架总结:
- strong,weak,retain,assign,copy nomatic 等的区别
- 移动的小球
- 从循环神经网络(RNN)到LSTM网络