LG P2822 NOIP2016D2T1 组合数问题
一句话题意
给定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 组合数问题的更多相关文章
- 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)
洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...
- 【洛谷p2822】组合数问题
(突然想 ??忘掉了wdt) (行吧那就%%%hmr) 组合数问题[传送门] (因为清明要出去培训数学知识所以一直在做数论) 组合数<=>杨辉三角形(从wz那拐来的技能 ...
- P5689 多叉堆
写在前面 OI 生涯中 AC 的首道组合数学应用题. 开题 5min 发现规律,写了半下午代码,调了两天,然而甚至没过样例,心态崩了.几天之后重新写了一份代码才 AC. 虽然思维难度不大,但毕竟是联赛 ...
- 洛谷P2822 组合数问题(题解)
https://www.luogu.org/problemnew/show/P2822(题目传送) 先了解一下有关组合数的公式:(m在上,n在下) 组合数通项公式:C(n,m)=n!/[m!(n-m) ...
- P2822 组合数问题——巧用前缀和
P2822 组合数问题 求的是C(i,j)有多少个是k的倍数: 首先,求组合数是有技巧的, 用杨辉三角求组合数,爽的一批: 但是,这样只能得90分,两个点T了: 因为k是不变的,我们可以用前缀和的思想 ...
- Luogu P2822 组合数问题(前缀和)
P2822 组合数问题 题意 题目描述 组合数\(C_n^m\)表示的是从\(n\)个物品中选出\(m\)个物品的方案数.举个例子,从\((1,2,3)\)三个物品中选择两个物品可以有\((1,2), ...
- AC日记——组合数问题 落谷 P2822 noip2016day2T1
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- 洛谷P2822 组合数问题
输入输出样例 输入样例#1: 1 2 3 3 输出样例#1: 1 输入样例#2: 2 5 4 5 6 7 输出样例#2: 0 7 说明 [样例1说明] 在所有可能的情况中,只有C_2^1 = 2C21 ...
- 洛谷P2822组合数问题
传送门啦 15分暴力,但看题解说暴力分有30分. 就是找到公式,然后套公式.. #include <iostream> #include <cstdio> #include & ...
随机推荐
- codeforces723E
One-Way Reform CodeForces - 723E There are n cities and m two-way roads in Berland, each road connec ...
- 利用Python构建时间序列模型解决实际问题的正确姿势
要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...
- php-m 与 phpinfo 不一致的解决办法
1.查看PHP当前加载的php.ini文件地址,在控制台输入以下命令: 1 php -i | grep php.ini 2.控制台返回的信息 1 2 Configuration File (php.i ...
- 图解Python 【第八篇】:网络编程-进程、线程和协程
本节内容一览图: 本章内容: 同步和异步 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 一.同步和异步 你叫我去吃饭 ...
- linux服务之memcached
http://www.runoob.com/memcached/memcached-cas.html https://github.com/memcached/memcached/blob/maste ...
- UmUtils得到友盟的渠道号
import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm ...
- Python写的大小写转换小工具
几行代码的小工具,用于进行如下转换 TRANSACTIONS ON CLOUD COMPUTING => Transactions On Cloud Computing orig = 'TRAN ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
笔记 2.Netflix开源组件断路器Hystrix介绍 简介:介绍Hystrix基础知识和使用场景 文档地址: https://github.com/Net ...
- [ML] Feature Transformers
方案选择可参考:[Scikit-learn] 4.3 Preprocessing data 代码示范可参考:[ML] Pyspark ML tutorial for beginners 本篇涉及:Fe ...
- CentOS7+rsync+sersync实现数据实时同步
一.全网数据备份方案 1.需要备份的文件目录有(原则上,只要运维人员写入或更改的数据都需要备份)./data,/etc/rc.local,/var/spool/cron/root等,根据不同都服务器做 ...