一句话题意

给定n、m和k,求对于所有的i(0<=i<=n)和j(0<=j<=min(i,m)),有多少对(i,j)使\(C_i^j\)使k的倍数

数据范围

部分分、满分做法和思路

30pts

直接暴力套公式(不用杨辉三角)

90pts

杨辉三角+二分。

具体实现:用vectorv[2005],v[i]中的元素j都是使得(i,j)可以满足要求的j。那么给定n、m后,枚举n,二分m即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int T,k,c[2005][2005];
vector<int>v[2005];
int main()
{
scanf("%d %d",&T,&k);
c[0][0]=c[1][0]=c[1][1]=1;
for(int i=2;i<=2000;i++)
{
for(int j=0;j<=2000;j++)
{
c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
if(c[i][j]%k==0) v[i].push_back(j);
}
}
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
int ans=0;
for(int i=2;i<=n;i++)
{
if(v[i].size()==0) continue;
int endd=min(m,i);
int l=0,r=v[i].size()-1,mid,tans=-1;
while(l<=r)
{
mid=(l+r)/2;
if(v[i][mid]>endd) r=mid-1;
else l=mid+1,tans=mid;
}
ans+=tans+1;
}
printf("%d\n",ans);
}
return 0;
}

100pts

(其实上面那种做法在我的电脑上能A。。但洛谷上T了两个点。不知道CCF少爷机会怎么样)

二分仍然太慢。让我们考虑预处理+O(1)回答每个询问的方法:前缀和(二维的)

用qian[i][j]表示n=i,m=j时有多少组解满足要求。很好实现。(r数组是辅助数组,r[i][j]表示n=i时的一维前缀和)

#include<bits/stdc++.h>
using namespace std;
int T,k,c[2005][2005],qian[2005][2005],r[2005][2005];
bool ok[2005][2005];
//vector<int>v[2005];
int main()
{
scanf("%d %d",&T,&k);
c[0][0]=c[1][0]=c[1][1]=1;
for(int i=2;i<=2000;i++)
{
for(int j=0;j<=i;j++)
{
c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
if(c[i][j]%k==0) ok[i][j]=1;
}
}
for(int i=1;i<=2000;i++)
{
r[i][0]=ok[i][0];
for(int j=1;j<=2000;j++)
{
r[i][j]=r[i][j-1]+ok[i][j];
}
}
for(int i=1;i<=2000;i++)
{
for(int j=0;j<=2000;j++)
{
qian[i][j]=qian[i-1][j]+r[i][j];
}
}
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
/*int ans=0;
for(int i=2;i<=n;i++)
{
if(v[i].size()==0) continue;
int endd=min(m,i);
int l=0,r=v[i].size()-1,mid,tans=-1;
while(l<=r)
{
mid=(l+r)/2;
if(v[i][mid]>endd) r=mid-1;
else l=mid+1,tans=mid;
}
ans+=tans+1;
}*/
printf("%d\n",qian[n][m>n?n:m]);
}
return 0;
}

LG P2822 NOIP2016D2T1 组合数问题的更多相关文章

  1. 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)

    洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...

  2. 【洛谷p2822】组合数问题

    (突然想          ??忘掉了wdt) (行吧那就%%%hmr) 组合数问题[传送门] (因为清明要出去培训数学知识所以一直在做数论) 组合数<=>杨辉三角形(从wz那拐来的技能 ...

  3. P5689 多叉堆

    写在前面 OI 生涯中 AC 的首道组合数学应用题. 开题 5min 发现规律,写了半下午代码,调了两天,然而甚至没过样例,心态崩了.几天之后重新写了一份代码才 AC. 虽然思维难度不大,但毕竟是联赛 ...

  4. 洛谷P2822 组合数问题(题解)

    https://www.luogu.org/problemnew/show/P2822(题目传送) 先了解一下有关组合数的公式:(m在上,n在下) 组合数通项公式:C(n,m)=n!/[m!(n-m) ...

  5. P2822 组合数问题——巧用前缀和

    P2822 组合数问题 求的是C(i,j)有多少个是k的倍数: 首先,求组合数是有技巧的, 用杨辉三角求组合数,爽的一批: 但是,这样只能得90分,两个点T了: 因为k是不变的,我们可以用前缀和的思想 ...

  6. Luogu P2822 组合数问题(前缀和)

    P2822 组合数问题 题意 题目描述 组合数\(C_n^m\)表示的是从\(n\)个物品中选出\(m\)个物品的方案数.举个例子,从\((1,2,3)\)三个物品中选择两个物品可以有\((1,2), ...

  7. AC日记——组合数问题 落谷 P2822 noip2016day2T1

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

  8. 洛谷P2822 组合数问题

    输入输出样例 输入样例#1: 1 2 3 3 输出样例#1: 1 输入样例#2: 2 5 4 5 6 7 输出样例#2: 0 7 说明 [样例1说明] 在所有可能的情况中,只有C_2^1 = 2C21 ...

  9. 洛谷P2822组合数问题

    传送门啦 15分暴力,但看题解说暴力分有30分. 就是找到公式,然后套公式.. #include <iostream> #include <cstdio> #include & ...

随机推荐

  1. Java编程思想代码环境配置

    官方代码网站已更改 https://github.com/BruceEckel/TIJ4-code 如果导入到IntelliJ中 方法1 在IntelliJ中新建一个Java项目将TIJ4-code- ...

  2. iReport 3.7.6 jasperreport 生成PDF汉字不显示问题的解决

    1.下载iTextAsian.jar 下载地址:https://www.oschina.net/action/code/download?code=51668&id=75706 2.在Irep ...

  3. 安装wget 、 wget命令

    今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装. 可以通 ...

  4. Linux设备驱动程序 之 read和write

    read和write原型 read和write方法完成的任务是相似的,亦即,拷贝数据到应用程序空间,或者反过来从应用程序空间拷贝数据:因此,它们的原型很相似,如下: ssize_t (*read) ( ...

  5. LVS集群

    集群: 将许多小的,性能较低的服务器做成一个大的性能高的超级服务器 集群分为负载均衡集群,高可用集群,高性能运算集群 LVS体系结构与工作原理描述 LVS集群负载均衡器接受服务的所有入站客户端计算机请 ...

  6. Message NNNN not found; No message file for product=network, facility=TNS

    Message NNNN not found; No message file for product=network, facility=TNS Table of Contents 1. 错误信息 ...

  7. mvc导出数据到pdf

    using iTextSharp;using iTextSharp.text;using iTextSharp.text.pdf; , , ") { System.Collections.A ...

  8. Spring Security登录超时,angular ajax请求出错自动跳转至登录页(jQuery也适用)

    公司开发采用Spring Security+AngualerJS框架,在session过期之后,ajax请求会直接出错.本文介绍如何实现出错情况下自动跳转至登录页. 整体思路是,session过期后, ...

  9. Docker容器时间与主机时间相差8小时

    查看主机时间 [root@localhost ~]# date 2016年 07月 27日 星期三 22:42:44 CST 查看容器时间 root@b43340ecf5ef:/# date Wed ...

  10. selenium 2019 笔记

    1.get打开本地目录的方法