CSP-X2024山东小学组T2:消灭怪兽

题目链接

题目名称

题目描述

怪兽入侵了地球!

为了抵抗入侵,人类设计出了按顺序排列好的 n n n 件武器,其中第 i i i 件武器的攻击力为 a i a_i ai,可以造成 a i a_i ai 的伤害。

武器已经排列好了,因此不能改变顺序。某件武器可以单独攻击,也可以与相邻的武器进行组合攻击。

具体来说,每次你可以把相邻的若干个(可以为 1 1 1 个,即不进行组合)连续
的武器组合起来进行攻击,则攻击力为这些连续的武器攻击力之和。

来自外星的怪兽拥有无敌护盾,不会受到任何伤害。但是人类在交战过程中发现怪兽有个致命的弱点:每次当受到 k k k k k k 的倍数的伤害时,怪兽的无敌护盾就能被打破。

请你帮助人类求出有多少种组合武器的方案,使得造成的伤害能打破怪兽的无敌护盾。

输入格式

第一行两个正整数 n , k n, k n,k 如题所述; 第二行为 n n n 个正整数,其中第 i i i 个数 a i a_i ai 表示第 i i i 件武器的攻击力。

输出格式

一行一个整数表示答案。

样例

样例输入 #1

5 3
1 2 3 4 5

样例输出 #1

7

样例输入 #2

10 11
1 4 8 10 16 19 21 25 30 43

样例输出 #2

7

样例输入 #3

6 2
2 2 2 2 2 2

样例输出 #3

21

提示

【样例1解释】
k = 3 k=3 k=3,而区间 [1, 2],[1, 3],[1, 5],[2, 4],[3, 3],[3, 5],[4, 5] 的区间
和均为 3 3 3 3 3 3 的倍数,故一共有 7 7 7 种方案。

【数据范围】

  • 20% 的数据, n , k ≤ 100 n, k ≤ 100 n,k100
  • 40% 的数据, n , k ≤ 10000 , 1 ≤ a i ≤ k n, k ≤ 10000,1 ≤ a_i ≤ k n,k10000,1aik
  • 另外存在10% 的数据, k = 2 k = 2 k=2
  • 另外存在10% 的数据,所有的 a i a_i ai 均相等。
  • 100% 的数据, 1 ≤ n ≤ 1 0 6 1 ≤ n ≤ 10^6 1n106 , 2 ≤ k ≤ 1 0 6 2 ≤ k ≤ 10^6 2k106 , 1 ≤ a i ≤ 1 0 9 1 ≤ a_i ≤ 10^9 1ai109

算法思想

朴素版前缀和

根据题目描述,只需要预处理出前缀和,然后枚举区间的开始位置 L L L和结束位置 R R R,判断 S [ R ] − S [ L − 1 ] S[R]-S[L-1] S[R]S[L1]是否为 k k k的倍数就可以了。

时间复杂度

  • 处理前缀和的时间复杂度为 O ( n ) O(n) O(n)
  • 枚举开始和结束位置的时间复杂度为 O ( n 2 ) O(n^2) O(n2)

总的时间复杂度为 O ( n 2 ) O(n^2) O(n2),其中 1 ≤ n ≤ 1 0 6 1 ≤ n ≤ 10^6 1n106,可以拿到60分。

代码实现

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 5;
LL a[N], s[N];
int main()
{int n, k;cin >> n >> k;LL ans = 0;for(int i = 1; i <= n; i ++) { cin >> a[i]; s[i] = s[i - 1] + a[i];}for(int i = 1; i <= n; i ++){for(int j = 1; j <= i; j ++){LL x = s[i] - s[j - 1];if(x % k == 0) ans ++;}}cout << ans << endl;
}

算法优化

连续区间 [ L , R ] [L, R] [L,R]中所有数的和是 11 11 11的倍数,那么前缀和数组中 S [ R ] − S [ L − 1 ] S[R] - S[L - 1] S[R]S[L1]一定是 11 11 11的倍数,也就是说 ( S [ R ] − S [ L − 1 ] ) m o d 11 = 0 (S[R] - S[L - 1])\ mod\ 11=0 (S[R]S[L1]) mod 11=0。根据这个性质,不妨将前缀和数组中的每个值 m o d 11 mod\ 11 mod 11,得到一个余数数组,如下图所示。
在这里插入图片描述
如果存在两个位置 x x x y y y余数相同,它们相减的差为 0 0 0,那么说明序列中区间 [ x + 1 , y ] [x+1,y] [x+1,y]中所有数的和为 11 11 11的倍数。

这样,只需要统计一下,余数数组中值为 i i i的个数,不妨设有 c n t cnt cnt个,那么任意两个都可以构成一个区间,其中所有数为 11 11 11的倍数,那么对答案的贡献为: c n t × ( c n t − 1 ) / 2 cnt\times(cnt-1)/2 cnt×(cnt1)/2

时间复杂度

  • 处理前缀和的时间复杂度为 O ( n ) O(n) O(n)
  • 遍历所有余数的时间复杂度为 O ( k ) O(k) O(k)

总的时间复杂度为 O ( n + k ) O(n+k) O(n+k),其中 1 ≤ n ≤ 1 0 6 1 ≤ n ≤ 10^6 1n106 , 2 ≤ k ≤ 1 0 6 2 ≤ k ≤ 10^6 2k106

代码实现

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 5;
int a[N], s[N], cnt[N];
int main()
{int n, k;cin >> n >> k;cnt[0] = 1;for(int i = 1; i <= n; i ++){cin >> a[i];s[i] = (s[i - 1] + a[i]) % k;cnt[s[i]] ++;}LL ans = 0;for(int i = 0; i < k; i ++){if(cnt[i] > 1) ans += (LL) cnt[i] * (cnt[i] - 1) / 2; }cout << ans << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472392.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第九天

视频参考:https://www.bilibili.com/video/BV1ouUPYAErK/ 修改之前的方波数据&#xff0c;改播放正弦波 下面主要讲关于浮点数 1. char&#xff08;字符类型&#xff09; 大小&#xff1a;1 字节&#xff08;8 位&#xff09;表示方式&#xff1a;char 存储的是一个字符的 A…

JWTUtil工具类

写一个Jwt工具类 导入如下pom.xml依赖 <!--fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.33</version></dependency><!--jwt依赖--><dependenc…

使用React和Vite构建一个AirBnb Experiences克隆网站

这一篇文章中&#xff0c;我会教你如何做一个AirBnb Experiences的克隆网站。主要涵盖React中Props的使用。 克隆网站最终呈现的效果&#xff1a; 1. 使用vite构建基础框架 npm create vitelatestcd airbnb-project npm install npm run dev2. 构建网站的3个部分 网站从上…

K8S containerd拉取harbor镜像

前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI&#xff0c;这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…

unity小:shaderGraph不规则涟漪、波纹效果

实现概述 在本项目中&#xff0c;我们通过结合 Sine、Polar Coordinates 和 Time 节点&#xff0c;实现了动态波纹效果。以下是实现细节&#xff1a; 核心实现 Sine 波形生成&#xff1a; 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化&#xff0c;为波纹效果提供…

设计模式(四)装饰器模式与命令模式

一、装饰器模式 1、意图 动态增加功能&#xff0c;相比于继承更加灵活 2、类图 Component(VisualComponent)&#xff1a;定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。ConcreteComponent(TextView)&#xff1a;定义一个对象&#xff0c;可以给这个对象添加一…

(附项目源码)nodejs开发语言,212 个性化音乐推荐系统的设计与实现,计算机毕设程序开发+文案(LW+PPT)

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

面试时问到软件开发原则,我emo了

今天去一个小公司面试&#xff0c;面试官是公司的软件总监&#xff0c;眼镜老花到看笔记本电脑困难&#xff0c;用win7的IE打开leetcode网页半天打不开&#xff0c;公司的wifi连接不上&#xff0c;用自己手机热点&#xff0c;却在笔记本电脑上找不到。还是我用自己的手机做热点…

数字IC后端低功耗设计实现案例分享(3个power domain,2个voltage domain)

下图所示为咱们社区T12nm A55低功耗实现项目。其实这个项目还可以根据产品的需求做一些改进。改进后项目实现的难度会大大增加。也希望通过今天的这个项目案例分享&#xff0c;帮助到今年IC秋招的同学。 芯片低功耗设计实现upf编写指南&#xff08;附低功耗项目案例&#xff0…

自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)

自动驾驶仿真&#xff1a;软件在环&#xff08;SIL&#xff09;测试详解 一、引言 自动驾驶技术的快速发展对测试验证提出了更高要求。软件在环&#xff08;Software-in-the-Loop&#xff0c;简称SIL&#xff09;仿真测试作为自动驾驶系统验证的重要手段&#xff0c;通过将自…

03-axios常用的请求方法、axios错误处理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

2002.6 Partitioning the UMLS semantic network.划分 UMLS 语义网络

Partitioning the UMLS semantic network | IEEE Journals & Magazine | IEEE Xplore 问题 统一医学语言系统&#xff08;UMLS&#xff09;语义网络中的语义类型&#xff08;ST&#xff09;在知识表示和应用中存在不足&#xff0c;例如 ST 的组织方式缺乏直观性和可解释性…

WSL与Ubuntu系统--使用Linux

WSL与Ubuntu系统--使用Linux 前言基础教学视频卸载链接网络配置方法1方法2 正式安装步骤步骤1 基本命令修改网络配置Ubuntu系统的导出与导入文件操作给Ubuntu创造界面--也就是在装一个有界面的UbuntuHyper-v与windows主机文件共享 前言 需要链接梯子&#xff0c;并且梯子十分稳…

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…

AlphaFold3中文使用说明

目录 1. 在线网站用例1. 使用json输入预测蛋白结构 2. 本地命令行2.1 运行示例2.2 AF3输入A&#xff09;指定输入B&#xff09;输入格式b&#xff09;JSON最外层结构b.1 序列多序列比对&#xff08;MSA&#xff09;结构模板&#xff08;templates&#xff09; b.2 共价键b.3 用…

vue2/vue3中使用的富文本编辑器vue-quill

前言&#xff1a; 整理下常用的富文本编辑器工具。 vue3: 实现效果&#xff1a; 实现步骤&#xff1a; 1、安装插件&#xff0c; 编辑器核心插件 vueup/vue-quill yarn add pnpm i npm i cnpm i vueup/vue-quill vueup/vue-quill 2、安装选择性插件 &a…

【星海随笔】ZooKeeper-Mesos

开源的由 Twitter 与 伯克利分校的 Mesos 项目组共同研发设计。 两极调度架构 支持高可用集群&#xff0c;通过ZooKeeper进行选举。 Mesos master 管理着所有的 Mesos slave 守护进程 每个slave运行具体的任务或者服务。 Franework 包括的调度器和执行机两部分 执行器运行在Me…

Spring Cloud Eureka 服务注册与发现

Spring Cloud Eureka 服务注册与发现 一、Eureka基础知识概述1.Eureka两个核心组件2.Eureka 服务注册与发现 二、Eureka单机搭建三、Eureka集群搭建四、心跳续约五、Eureka自我保护机制 一、Eureka基础知识概述 1.Eureka两个核心组件 Eureka Server &#xff1a;服务注册中心…

前后端分离练习(云客项目)

这几天学习了一点前端的开发&#xff0c;后面通过这个小项目来整理开发的过程&#xff0c;参考的是动力节点的动力云客这个项目&#xff0c;大家有兴趣可以去看一下视频&#xff0c;我更多的是学习了它的前端开发&#xff0c;后端我是用自己的方式来的&#xff0c;那么开始今天…

Spring boot + Vue2小项目基本模板

Spring boot Vue2小项目基本模板 基本介绍基本环境安装项目搭建最终效果展示 基本介绍 项目来源哔哩哔哩的青戈&#xff0c;跟着学习搭建自己的简单vue小项目&#xff1b;看别人的项目总觉得看不懂&#xff0c;需要慢慢打磨 这里目前只简单的搭建了菜单导航和表格页面&#x…