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.mzph.cn/diannao/61279.shtml

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

相关文章

网络安全常见练习靶场

DVWA (Dam Vulnerable Web Application) DVWA是用PHPMysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。 链接地址&#xff1a;http://www.dvwa.co.uk mutillidaemutillidae mutillidaemutillidae是一个免费&am…

【操作系统笔记】目录

【操作系统笔记】操作系统框架https://blog.csdn.net/Resurgence03/article/details/142624262 【操作系统笔记】CPU管理https://blog.csdn.net/Resurgence03/article/details/142621526 【操作系统笔记】内存管理https://blog.csdn.net/Resurgence03/article/details/142669…

用 Python 与 Turtle 创作属于你的“冰墩墩”!

用 Python 与 Turtle 创作属于你的“冰墩墩”&#xff01; &#x1f980; 前言 &#x1f980;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f980; 前言 &#x1f980; 冰墩墩是2022年北京冬季奥林匹克运动会的官方吉祥物。以熊猫为原型&#x…

C++将整形数据转换为字符串

在 C 中&#xff0c;将整数转换为字符串有多种方法&#xff0c;以下是几种常见的方式&#xff1a; 1. 使用 std::to_string 函数&#xff08;C11 及以后版本可用&#xff09; 函数介绍&#xff1a;std::to_string 是 C 标准库提供的一个非常方便的函数&#xff0c;它位于 <…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块&#xff1a;管理员&#xff08;农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等&#xff09;&#xff0c;普通用户&#xff08;注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等&#xff09;技术选型&#…

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台 传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大&#xff0c;也被企业广泛采用&#xff0c;然后也存着在诸如学习曲线陡峭&#xff0c;上手难度大&#x…

提取repo的仓库和工作树(无效)

问题 从供应商处获取的.repo的git仓库裸(project-object)仓库和工作树(projects)是分开的。 解决方案 根据工作树的软链接路劲&#xff0c;将工作树合并到project-object下。 import os import shutil import argparse import logging# 设置日志配置 logging.basicConfig(l…

关于ES的查询

查询结果那么多字段都是什么&#xff1f; 为什么会提到这个问题呢&#xff0c;因为默认ES查询的结果会有很多信息&#xff0c;我们可能并不希望要那么多数据&#xff0c;所以你需要了解这些字段都表示什么&#xff0c;并正确的返回和使用它们。 took– Elasticsearch 运行查询…

集群聊天服务器(8)用户登录业务

目录 登录状态业务层代码数据模型层代码记录用户的连接信息以及线程安全问题客户端异常退出业务 登录状态 登录且状态变为online 业务层代码 #include "chatservice.hpp" #include "public.hpp" #include <string> #include <muduo/base/Loggi…

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…

RabbitMQ消息可靠性保证机制4--消费端限流

7.7 消费端限流 在类似如秒杀活动中&#xff0c;一开始会有大量并发写请求到达服务端&#xff0c;城机对消息进行削峰处理&#xff0c;如何做&#xff1f; 当消息投递的速度远快于消费的速度时&#xff0c;随着时间积累就会出现“消息积压”。消息中间件本身是具备一定的缓冲…

flex布局样式 类名化scss(sass)

sass 和less 语法有差异需要转化一下 $directionList: row, row-reverse, column, column-reverse; $justifyContentList: flex-start, flex-end, center, space-between, space-around, space-evenly; $alignItemsList: flex-start, flex-end, center, baseline, stretch;mixi…

【phpseclib】 PHP 使用加密算法 RSA、DES、AES等

一、Composer 下载 phpseclib # 我使用的是 phpseclib3 composer require phpseclib/phpseclib二、RSA 加密解密 // 我使用的是 phpseclib3use phpseclib3\Crypt\RSA;$type PKCS8; // 看需求选其一, PKCS8 | PKCS1 | JWK | MSBLOB | OpenSSH | PSS | PuTTY | Raw | WML $rsa…

labview中的调用链

在有些项目中会用到调用链&#xff0c;用我自己的理解来说就像是递归函数那样层层调用&#xff0c;然后结果回退到第一次开始调用的main函数哪里&#xff0c;这里对于传值的时候还是非常好用&#xff0c;通过更改子VI然后来改变主VI的里面函数的值来实现这个效果。 我们可以看…

django从入门到实战(四)——模型与数据库

1. 模型的定义与数据迁移 1.1 模型的定义 在 Django 中&#xff0c;模型是一个 Python 类&#xff0c;用于定义数据库中的数据结构。每个模型类对应数据库中的一张表&#xff0c;类的属性对应表中的字段。 示例&#xff1a; from django.db import modelsclass Blog(models…

MySQL初学之旅(3)约束

目录 1.前言 2.正文 2.1约束类型 2.2NULL约束 2.3UNIQUE约束 2.4DEFAULT约束 2.5PRIMARY KEY主键约束 2.6FOREIGN KEY外键约束 2.7CHECK约束 3.小结 1.前言 哈喽大家好啊&#xff0c;今儿来继续给大家分享最近学习的MySQL和约束相关的知识点&#xff0c;希望大家一起…

Ubuntu Linux使用前准备动作 配置SSH

在 Ubuntu 系统中配置 SSH 服务可以通过以下步骤进行&#xff1a; 1、安装ssh服务 1&#xff09;打开终端&#xff08;可以使用快捷键 Ctrl Alt T&#xff09;。 2&#xff09;运行以下命令安装 OpenSSH 服务器&#xff1a; sudo apt-get update&#xff1a;这一步是更新…

网络爬虫 Python-(初始篇1 后期照样有)

一、网络爬虫基础概念 定义&#xff1a;网络爬虫&#xff08;Web Crawler&#xff09;也叫网络蜘蛛&#xff08;Web Spider&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。它可以从网页上获取各种数据&#xff0c;比如文本内容…

在MATLAB中实现自适应滤波算法

自适应滤波算法是一种根据信号特性自动调整滤波参数的数字信号处理方法&#xff0c;其可以有效处理噪声干扰和信号畸变问题。在许多实时数据处理系统中&#xff0c;自适应滤波算法得到了广泛应用。在MATLAB中&#xff0c;可以使用多种方法实现自适应滤波算法。本文将介绍自适应…

wordpress独立站首页调用产品的三种方法

在WordPress独立站中&#xff0c;展示最新产品、最热门产品和推荐产品是吸引用户和促进销售的重要手段。以下是三种实现这些功能的方法&#xff1a; 1. 使用WooCommerce内置功能 如果你的WordPress站点使用了WooCommerce插件来管理产品&#xff0c;你可以利用它的内置功能来展…