当前位置: 首页 > news >正文

做代售机票网站程序常州哪家做网站好

做代售机票网站程序,常州哪家做网站好,网页制作模板主题,wordpress 如何使用php版本✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:蓝桥杯题解集合 📝原题地址:K 倍区间 📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家…

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:蓝桥杯题解集合
📝原题地址:K 倍区间
📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家都能取得理想成绩!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

问题描述

给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。

你能求出数列中总共有多少个 K 倍区间吗?

输入格式

第一行包含两个整数 N 和 K。

以下 N 行每行包含一个整数 Ai。

输出格式

输出一个整数,代表 K 倍区间的数目。

数据范围

1≤N,K≤100000,
1≤Ai≤100000

输入样例:

5 2
1
2
3
4
5

输出样例:

6

思路

这道题涉及到了区间和的计算,所以可以用前缀和的思想来做。

首先,先对传入的区间求一遍前缀和,然后再去遍历每个区间来判断该区间和是否满足 K 的倍数。

就拿题目样例举例,我们看其中一个区间 [2,4],可以直接利用前缀和数组计算出该区间的和,然后判断是否为 K 的倍数,可以发现该区间和为 15 - 3 = 12,且 k = 2 故满足 K 的倍数,答案加一。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjRDhtus-1677288292090)(AcWing 蓝桥杯辅导.assets/5-2.png)]

我们在此基础上优化一下,可以用空间换时间,通过题目可以知道区间 [l , r] 的和是 k 的倍数即 (sum[r]−sum[l−1])%k==0(sum[r] - sum[l-1]) \% k == 0(sum[r]sum[l1])%k==0,可以推出 sum[r]%k==sum[l−1]%ksum[r] \% k == sum [l-1] \% ksum[r]%k==sum[l1]%k

再解释下 ans+=res[sum[i]]ans += res[sum[i]]ans+=res[sum[i]]

首先明确 res[sum[i]]res[sum[i]]res[sum[i]] 表示的是 sum[i]sum[i]sum[i] 出现过的次数。

举个例子,假设 sum[i]=3sum[i] = 3sum[i]=3,在后边的循环中,又出现了一个 sum[i]=3sum[i] = 3sum[i]=3,那么此时,这个 “3” 可以和前边出现过的所有的 “3” 分别构成一个 K 倍区间,前边的 “3” 一共出现过 res[sum[i]]res[sum[i]]res[sum[i]] 次,所以此时又新增了res[sum[i]]res[sum[i]]res[sum[i]] 个 K 倍区间。

代码

前缀和
#include <bits/stdc++.h>
using namespace std;int n, k;
const int N = 100010;
int s[N];int main() {scanf("%d%d", &n, &k);//计算前缀和for (int i = 1; i <= n; i++) {scanf("%d", &s[i]);s[i] += s[i - 1];}//枚举每个区间,判断其和是否为K的倍数int res = 0;for (int l = 1; l <= n; l++)for (int r = l; r <= n; r++)if ((s[r] - s[l - 1]) % k == 0)res++;cout << res << endl;return 0;
}
前缀和(优化)
#include <bits/stdc++.h>
using namespace std;int n, k;
const int N = 100010;
typedef long long LL;
int sum[N], a[N];   //一个储存前缀和,一个储存余数int main() {scanf("%d%d", &n, &k);LL res = 0;for (int i = 1; i <= n; i++) {scanf("%d", &sum[i]);sum[i] = (sum[i] + sum[i - 1]) % k; //求前缀和的余数res += a[sum[i]]; //计算可以匹配两两区间结合的数量a[sum[i]]++;}//这里还要加a[0]是因为之前加的是两两区间结合算一次//而余数为0是个特殊值,它可以单独算一个,因此要算上余数为0的区间自身cout << res + a[0] << endl; return 0;
}
http://www.yayakq.cn/news/287665/

相关文章:

  • 建站步骤图网站开发的软硬件环境
  • 个人做网站外包价格如何算微信营销的模式
  • 齐全的网站建设知道网站是wp程序做的如何仿站
  • 类模板模板下载网站有哪些内容企业服务有哪些
  • 看手表网站工控机软件开发工具
  • 制作网页网站小说教程网站建设怎么宣传
  • 2016网站开发语言青岛网站推广途径
  • 用自己的电脑做网站wordpress 伪静态实现
  • 做网站跟桌面程序差别大吗知名设计公司
  • 北京最大专业网站建设网站设计和营销
  • 网站验证码文件专业管网建设服务
  • 有什么做服装的网站广州网站设计推荐刻
  • 济南网站建设泉诺wordpress 阿里秀
  • 哪家手机网站建设网站cmd做路由分析
  • 做网站需要下载啥pis粉丝做的网站
  • 免费试用网站制作响应式 购物网站模板
  • 济南 制作网站 公司什么网站做招聘效果好
  • 临沂兰山网站建设广州建设网站专家
  • 威海市环翠区建设局网站专业网站建设知识
  • 口碑好的昆明网站建设网络优化方案案例
  • 河南网站制作公司哪家好群晖部署wordpress
  • 绵竹移动网站建设彩票网站建设维护
  • php开源企业网站系统建设家居网站
  • 仿历史网站模板江西住房和城乡建设厅网站
  • 长春网站建设q.479185700惠怎么自己创建一个网页
  • 英文 edm营销 的网站 与 工具东莞网站建设对比
  • 富通建设有限公司网站用html做女装网站
  • 龙元建设网站网站更换图片之类的怎么做
  • 推荐一个做淘客网站做网站使网页不居中
  • 安阳网站建设策划开发公司工程部技术负责人职责