题目链接:https://vijos.org/p/2006

当时在考场上只想到了暴力的做法,现在自己看了以后还是没思路,最后看大佬说的杨辉三角才懂这题。。。

我自己总结了一下,我不能反应出杨辉三角的递推是因为对组合C和排列S不熟悉导致的,这些公式基本都是我的短板

从杨辉三角形看出,杨辉三角的i,j位(有0位)就是在i个数选j个出来的方案数,,我们来看下杨辉三角吧

------------------------------------------------------------------------------------------------------------------------------

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10  10   5  1

1  6  15  20   15   6  1

………………………………………………

--------------------------------------------------------------------------------------------------------------------------------

只需要赋初值最上面那个a[0][0]为1就可以预处理出这个2000*2000的图了。。。。

输入n,m只需要判断0<=i<=n和0<=j<=min(n,m)的所有数是不是k的倍数,这个来源就是n,m的左方和上方的数,用以n,m为原点的坐标系说就是第二象限的值,包括x负半轴y正半轴

所以维护一个line[j]表示到当前为止,第j列有几个是k的倍数,然后就是自己这列的个数加上num[i-1][j]

num[i][j]=num[i-1][j]+line[j]

然后就可以愉快的做这道题了,最后提醒一点

所有的杨辉三角的值对k取个模,因为我们只是找k个倍数

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<iostream>
#include<cstdlib>
#define maxn 2005
using namespace std; int t,k,a[maxn][maxn];
int num[maxn][maxn];
int n,m,line[maxn]; void show(int x){
for(int i=;i<=x;i++){
for(int j=;j<=i;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
} void show2(int x){
for(int i=;i<=x;i++){
for(int j=;j<=i;j++){
printf("%d ",num[i][j]);
}
printf("\n");
}
} int main(){
for(int i=;i<=;i++)
a[i][]=;
scanf("%d%d",&t,&k);
for(int i=;i<=;i++){
for(int j=;j<=i;j++){
a[i][j]=(a[i-][j-]+a[i-][j])%k;
int look=a[i][j];
if(a[i][j]==){//是k倍数
line[j]++;
}
num[i][j]=num[i][j-]+line[j];
}
}
// show(6);
// show2(6);
for(int i=;i<=t;i++){
scanf("%d%d",&n,&m);
m=min(m,n);
printf("%d\n",num[n][m]);
}
//show函数只是用来输出这个表,看下有没有误而已,可以删去
}

总结:很多一看就知道爆数组爆longlong的题,把结果用表格对应写出来,说不定会有意想不到的惊喜

最新文章

  1. xampp安装
  2. docker push 实现过程
  3. sql关于Group by
  4. JS 日期格式化和解析工具
  5. memory_limit的一个bug | 风雪之隅
  6. angularJs:双向数据绑定
  7. 基于select模型的udp客户端实现超时机制
  8. OpenCV 2.4.9
  9. Ubuntu12.04安装java以及Eclipse和Tomcat
  10. Android平台对H264视频硬解码
  11. 数据库————Select 查询
  12. Sublime Text 快捷键--持续更新
  13. WP8.1开发中关于媒体(图片)文件的生成操作,属性如何设置(内容/嵌入资源等);
  14. 配置远程服务器,使hyper-v能够连接网络
  15. hdu 2046递推
  16. Ubuntu配置MYSQL远程连接
  17. windows进程查看
  18. Java XML DOM解析范例源码
  19. html5(八) IndexedDB
  20. JavaScript图形库

热门文章

  1. Vue请求第三方接口跨域最终解决办法!2020最终版!
  2. 如何在PHP7中扩展mysql,先安装php7.2。后安装mysql
  3. background-attachment 制造视差滚动效果案例
  4. Graylog2进阶 打造基于Nginx日志的Web入侵检测分析系统
  5. Asp.Net Core 中IdentityServer4 授权原理及刷新Token的应用
  6. watch 同步表单 记得$nextTick,否则不会同步更新到组件内
  7. vscode在执行 npm任务的时候,会先执行package的name@version 然后命令名 加 当前路径,问题是我的引入路径e是小写的,会导致调试错误,解决方案:没找到,先手书吧
  8. 2016 Multi-University Training Contest 1 T4
  9. vscode 的tab空格设置设置为4的方法
  10. 重定向URL乱码问题