Day 2 T1
题目描述
组合数表示的是从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 2
3 3
1
2 5
4 5
6 7
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的更多相关文章
- T1加权像(T1 weighted image,T1WI)
T1加权成像(T1-weighted imaging,T1WI)是指这种成像方法重点突出组织纵向弛豫差别,而尽量减少组织其他特性如横向弛豫等对图像的影响. 弛豫:物理用语,从某一个状态恢复到平衡态的过 ...
- 关于2016.12.12——T1的反思:凸包的意义与应用
2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...
- T2 Func<in T1,out T2>(T1 arg)
委托调用方法的4种方式. using System; using System.Collections.Generic; namespace ConsoleApplication1 { delegat ...
- E1、T1链路
北美的24路脉码调制PCM简称T1 速率是1.544Mbit/s 北美使用的T1系统共有24个话路,每个话路采样脉冲用7bit编码,然后再加上1位信令码元,因此一个话路占用8bit. 帧同步码是在24 ...
- Action<T1, T2>委托
封装包含两个参数的方法委托,没有返回值. 语法 public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2 ) 类型参数 in ...
- 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载
T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在 ...
- 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join
public class TestJoin { public static void main(String[] args) { Thread t1 = new Thread(new T1(), &q ...
- 【测试】在hr用户下自行创建T1和T2表写一条SQL语句,(NL连接)
SQL> select t1.* from t1,t2 where t1.object_id=t2.object_id; rows selected. Execution Plan ------ ...
- MRI中T1和T2的含义与区分[转]
A. MRI名词解释 T1加权像.T2加权像为磁共振检查中报告中常提到的术语,很多非专业人士不明白是什么意思,要想认识何为T1加权像.T2加权像,请先了解几个基本概念: 1.磁共振(maget ...
- noip2015day1 T1 4510 神奇的幻方
4510 神奇的幻方 noip2015day1 T1 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
随机推荐
- KMP学习之旅
说起kmp就要从字符串的匹配说起,下面我们谈谈字符串的匹配 给定一个原字符串:bababababababababb,再给定一个模式串:bababb,求模式串是否在源字符串中出现 最简单的方法就是遍历源 ...
- PHP收藏
PHP打印测试,PHP调试技巧 PHP header函数使用大全 PHP面向对象(OOP)编程入门教程 小片段: PHP保留2位小数 格式化小数.浮点数 header('Content-T ...
- phalcon3.0.1默认多模块生成的几个bug
发现用Phalcon DevTools (3.0.0)生成的多模块有一些bug: 默认的路由定义,字符串替换有误 原代码// $namespace = str_replace('Module','Co ...
- redis实战(01)_redis安装
早就想对redis进行实战操作了,最近看了一些视频和参考书籍,总结总结一下,redis实战内容: 实战前先对redis做一个大概的认识: 现在开始安装redis了... redis的安装下载地址 ht ...
- 架构和模式的区别:三层架构和MVC在应用开发中的位置
架构是系统层面的,可以是多层架构,也可以是事件驱动架构,也可以是微服务架构. 模式是GUI应用的一种职责分离设计. 三层架构(包含多层架构)和 MVC模式(包含MVP, MVVM) 没什么关系,它们不 ...
- Xcode的一个简单的UITests
国内写Tests的很少,写UITests的更少了...或许只是我眼见不够开阔.网上那么几篇都是Swift的.这里给个简单的OC. - (void)viewDidLoad { [super viewDi ...
- JavaFx导出文件
导出文件格式可选 protected void handExportDateAction(ActionEvent event) { // ShowDialog.showConfirmDialog(FX ...
- 使select文本框可编辑可选择(jQuery插件)
最近做项目中用到了这个插件,正好分享下. 1. 需要用的js包点击下载,在项目中引入该js. <script src="${pageContext.request.contextPa ...
- U3D学习笔记1: HelloWorld
Unity 版本: 5.3.5.f1 Hello World工程 1.新建工程 HelloWorld U3D可选2D和3D游戏 2.新建C#脚本文件 在project栏的assets目录右键-&g ...
- CRUD操作
1.增加 insert into 表名 values(列的值,列的值) insert into 表名(列名,列名)valuse(值,值) 2.删除 delete from 表明 delete from ...