题目描述

组合数表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给出计算组合数的一般公式:

其中n! = 1 × 2 × · · · × n

小葱想知道如果给定n,m和k,对于所有的0 <= i <= n,0 <= j <= min(i,m)有多少对 (i,j)满足是k的倍数。

输入输出格式

输入格式:

第一行有两个整数t,k,其中t代表该测试点总共有多少组测试数据,k的意义见 【问题描述】。

接下来t行每行两个整数n,m,其中n,m的意义见【问题描述】。

输出格式:

t行,每行一个整数代表答案。

输入输出样例

输入样例#1:

1 2
3 3
输出样例#1:

1
输入样例#2:

2 5
4 5
6 7
输出样例#2:

0
7

说明

【样例1说明】

在所有可能的情况中,只有是2的倍数。

【子任务】

//这个方法比较简单
//由组合数可知,c(m,n)=(n-m+1)!/(m!) ,那么要想组合数能整除k,就必须统计k的质因数 是否包涵与c的质因数。
// 用g[i]表示i中k的质因数个数
// 用f[i]表示i!中k的质因数个数
//因为2-21 中k能分解成两种不同的质因数,所以有g2,f2
//用 z[i][j]代表 c(1到j,i)中能被k整除的个数
//用 u[i][j]代表 c(1到j,1到i)中能被k整除的个数 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string.h>
using namespace std;
int read() //读入优化
{
int in=,k=;char c=getchar();
for(;c>''||c<'';c=getchar()) if(c=='-') k=-;
for(;c<=''&&c>='';c=getchar())
in=in*+c-'';
return k*in;
}
int k,k2,nk,nk2,n,m,all,g[],g2[],jy[][]; int a[],f[],f2[],t,qu[][],maxn=; bool check(int n,int m) //判断组合数 C(m,n) 是否能被k整除
{
int a=f[n]-f[n-m+-];
int b=f[m];
int c=f2[n]-f2[n-m+-];
int d=f2[m];
if(a-b>=nk&&c-d>=nk2)
{
return ;
}else
return ;
} int h[][],u[][],maxm,z[][];
int main()
{
// freopen("problem.in","r",stdin);
// freopen("problem.out","w",stdout);
scanf("%d%d",&t,&k); if(k==) k=,k2=,nk=,nk2=; //打表爆力分解质因数 分成 k,k2
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=;
else if(k==) k=,k2=,nk=,nk2=; for(int i=;i<=t;i++)
{
qu[i][]=read();
qu[i][]=read();
qu[i][]=min(qu[i][],qu[i][]);
if(qu[i][]<qu[i][]) qu[i][]=qu[i][];
if(qu[i][]>maxn) maxn=qu[i][];
if(qu[i][]>maxm) maxm=qu[i][];
}
//计算1到最大n 的每个数中有k 有多少个
for(int i=;i<=maxn;i++)
{
int j=,q=i;
while(q%k==) q/=k,j++;
g[i]=j;
}
//计算1到最大n 的每个数中有k2 有多少个
if(k2!=)
for(int i=;i<=maxn;i++)
{
int j=,q=i;
while(q%k2==) q/=k2,j++;
g2[i]=j;
}
memset(jy,0xfffffff,sizeof(jy));
//计算前缀 即 1到i 中有多少个k
for(int i=;i<=maxn;i++)
f[i]+=f[i-]+g[i];
//1到i 中有多少个k2
if(k2!=) for(int i=;i<=maxn;i++)
f2[i]+=f2[i-]+g2[i];
//计算z与u
for(int i=;i<=maxn;i++)
for(int j=;j<=i&&j<=maxm;j++)
z[i][j]=z[i][j-]+check(i,j),
u[i][j]=u[i-][min(i-,j)]+z[i][j]; for(int i=;i<=t;i++)
printf("%d\n",u[qu[i][]][qu[i][]]);
return ;
}

Day 2 T1的更多相关文章

  1. T1加权像(T1 weighted image,T1WI)

    T1加权成像(T1-weighted imaging,T1WI)是指这种成像方法重点突出组织纵向弛豫差别,而尽量减少组织其他特性如横向弛豫等对图像的影响. 弛豫:物理用语,从某一个状态恢复到平衡态的过 ...

  2. 关于2016.12.12——T1的反思:凸包的意义与应用

    2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...

  3. T2 Func<in T1,out T2>(T1 arg)

    委托调用方法的4种方式. using System; using System.Collections.Generic; namespace ConsoleApplication1 { delegat ...

  4. E1、T1链路

    北美的24路脉码调制PCM简称T1 速率是1.544Mbit/s 北美使用的T1系统共有24个话路,每个话路采样脉冲用7bit编码,然后再加上1位信令码元,因此一个话路占用8bit. 帧同步码是在24 ...

  5. Action<T1, T2>委托

    封装包含两个参数的方法委托,没有返回值. 语法 public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2 ) 类型参数 in ...

  6. 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载

    T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在 ...

  7. 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join

    public class TestJoin { public static void main(String[] args) { Thread t1 = new Thread(new T1(), &q ...

  8. 【测试】在hr用户下自行创建T1和T2表写一条SQL语句,(NL连接)

    SQL> select t1.* from t1,t2 where t1.object_id=t2.object_id; rows selected. Execution Plan ------ ...

  9. MRI中T1和T2的含义与区分[转]

    A. MRI名词解释   T1加权像.T2加权像为磁共振检查中报告中常提到的术语,很多非专业人士不明白是什么意思,要想认识何为T1加权像.T2加权像,请先了解几个基本概念:   1.磁共振(maget ...

  10. noip2015day1 T1 4510 神奇的幻方

    4510 神奇的幻方 noip2015day1 T1  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descripti ...

随机推荐

  1. 爬取https页面遇到“SSLError: hostname 'xxx' doesn't match either of”的解决方法

    使用python requests 框架包访问https://itunes.apple.com 页面是遇到 SSLError: hostname 'itunes.apple.com' doesn't ...

  2. 网络第二节——AFNworking

    /** 要使用常规的AFN网络访问 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; ...

  3. 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币

    题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...

  4. CentOS最常用命令及快捷键整理

    CentOS最常用命令及快捷键整理  整理了Linux常用命令及快捷键. 常用命令: 文件和目录: # cd /home                        进入 '/home' 目录 # ...

  5. 使用Open xml 操作Excel系列之二--从data table导出数据到Excel

    由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...

  6. secureCRT The remote system refused the connection.

    转 http://blog.csdn.net/lifengxun20121019/article/details/13627757 我在实践远程登录工具SecureCRT的时候遇到了这个问题 Ubun ...

  7. jQuery插件中的this指的是什么

    在jQuery插件的范围里, this关键字代表了这个插件将要执行的jQuery对象, 但是在其他包含callback的jQuery函数中,this关键字代表了原生的DOM元素.这常常会导致开发者误将 ...

  8. [mark] 使用Sublime Text 2时如何将Tab配置为4个空格

    在Mac OS X系统下,Sublime Text是一款比较赞的编辑器. 作为空格党的自觉,今天mark一下使用Sublime Text 2时如何将Tab配置为4个空格: 方法来自以下两个链接: ht ...

  9. visual studio 2013 中配置OpenCV2.4.13 姿势

    首先在path中添加 “C:\OpenCV\opencv\build\x64\vc12\bin”   (地址随实际变化) 注:添加的都是*86不使用*64 在visualstudio 2013中配置 ...

  10. saltstack命令执行过程

    saltstack命令执行过程 具体步骤如下 Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc salt ...