【字节笔试题】大小为n的数组中有多少个连续子数组满足该子数组所有元素的乘积是k的倍数?

题目描述

小红拿到了一个大小为n的数组,他想知道,有多少连续子数组满足,该子数组所有元素的乘积是k的倍数?

输入输出

第一行输入2个整数,分别是数组长度n和参数k
第二行输入n个元素的数组

n有10^5级别
数组元素有10^6级别
k有10^12级别

样例

input
3 6
2 3 4output
3

思路

前缀积 + 质因数分解 + 滑窗

代码

#include <bits/stdc++.h>
using namespace std;// 质因数分解
vector<vector<int>> primeFactor(int n) {vector<int> res;for (int i = 2; i <= n / i; ++ i) {while (n % i == 0) {res.push_back(i);n /= i;}}if (n > 1) res.push_back(n);unordered_map<int, int> m;for (int i = 0; i < res.size(); ++ i) {m[res[i]] ++;}vector<vector<int>> ans;for (auto it = m.begin(); it != m.end(); ++ it) {ans.push_back({it->first, it->second});}return ans;
}int main() {int n = 3, k = 6;cin >> n >> k;vector<int> nums(n);for (int i = 0; i < n; ++ i) {cin >> nums[i];}auto fact = primeFactor(k);// b[i][j] 表示 nums[i] 中包含 fact[j][0] 的个数vector<vector<int>> b(1, vector<int>(fact.size(), 0));for (int i = 0; i < n; ++ i) {vector<int> tmp = b.back();for (int j = 0; j < fact.size(); ++ j) {while (nums[i] % fact[j][0] == 0) {nums[i] /= fact[j][0];tmp[j] += 1;}}b.push_back(tmp);}// 检查子数组 [l, r] 是否满足条件auto check = [&](int l, int r) -> bool {for (int i = 0; i < fact.size(); ++ i) {if (b[r+1][i] - b[l][i] < fact[i][1]) {return false;}}return true;};int l = 0, r = 0;int ans = 0;for (r = 0; r < n; ++ r) {while (l <= r && check(l, r)) {// [l, r], [l, r+1], ... [r, n-1] 都满足条件ans += n - r;l ++;}}cout << ans << endl;return 0;
}

参考:字节跳动 秋招 2023.10.08 编程题目与题解

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

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

相关文章

2021年数维杯国际大学生数学建模A题新冠肺炎背景下港口资源优化配置策略求解全过程文档及程序

2021年数维杯国际大学生数学建模 A题 新冠肺炎背景下港口资源优化配置策略 原题再现&#xff1a; 2020年初&#xff0c;新型冠状病毒&#xff08;COVID-19&#xff09;在全球迅速蔓延。根据世界卫生组织2021年7月31日的报告&#xff0c;新冠病毒疫情对人类的影响可能比原先预…

Tomcat-安装部署(源码包安装)

一、简介 Tomcat 是由 Apache 开发的一个 Servlet 容器&#xff0c;实现了对 Servlet 和 JSP 的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#xff0c;Tomcat是一个WEB应用程序的托管平台…

安装升级备份卸载 Grafana

要在 RHEL 或 Fedora 上卸载 Grafana&#xff0c;请按照以下步骤操作&#xff1a; 如果您配置了 Grafana 使用 systemd&#xff0c;请停止 Grafana 服务器的 systemd 服务&#xff1a; sudo systemctl stop grafana-server如果您配置了 Grafana 使用 init.d&#xff0c;请停止 …

【MySQL学习之基础篇】约束

文章目录 1. 概述2. 基础约束3. 外键约束3.1. 介绍3.2. 外键的添加3.3. 外键删除和更新行为 1. 概述 概念&#xff1a; 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。     目的&#xff1a; 保证数据库中数据的正确、有效性和完整性。 分类&#x…

Django使用UUID作为主键

Django这个框架&#xff0c;如果你在定义模型时没有显式的指定主键&#xff0c;那么它会贴心的送你一个自增的id主键&#xff1a; class SomeModel(model.Model):# 下面这个 id 字段是不需要写的&#xff0c;django 自动附送# id models.AutoField(primary_keyTrue)... 这个…

BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-软件定时器)

简介 RT-Thread 软件定时器的简单使用步骤 创建项目 参考 BearPi RT-Thread项目创建 定时器管理接口 定时器时钟节拍 定时器管理相关函数 定时器类型 #define RT_TIMER_FLAG_ONE_SHOT 0x0 //一次性计时器 #define RT_TIMER_FLAG_PERIODIC 0x2 // 周期性定时器 #…

【Docker】ES、Kibana及IK安装配置

目录 一.单节点安装部署 1.版本选择 2.推荐及总结 ​3.官网下载地址 4.创建网络 5.拉取镜像 6.创建文件夹 7.运行docker命令 二、安装kibana 1.安装kibana 2.浏览器访问 3.国际化 三、Elasticsearch查询 1.数据插入&#xff1a;POST或PUT 2.数据查询GET 3.分词…

如何用Adobe Audition 检测波形的pop和卡顿

在Adobe Audition中&#xff0c;检测卡顿和pop的方法各有不同&#xff1a; 1. **检测卡顿**&#xff1a; - 使用“诊断”面板中的“删除静音”或“标记音频”选项可以帮助识别音频中的静音段落&#xff0c;这可能表明存在卡顿。 - 配置诊断设置&#xff0c;指定静音的振…

docker consul容器的自动发现与注册

一、微服务&#xff08;容器&#xff09;的注册与发现——微服务架构中极其重要的组件 1、定义&#xff1a;是一种分布式管理系统以及定位服务的方法。传统架构中&#xff0c;应用程序之间直连到已知的服务&#xff0c;设备提供的网络&#xff08;IP地址&#xff09;&#xff…

高级前端开发工程师

岗位需求 熟练掌握前端主流框架Vue、React、Angular,至少熟练掌控Vue全家桶 文章目录 岗位需求前言一、Vue框架二、React框架三、Angular框架四、什么是Vue全家桶前言 -那就看你表哥的电脑里有没有硬盘 -我不敲键盘 一、Vue框架 Vue(读音为/vjuː/,类似于"view"…

Linux 内存池源码剖析

1 传统的分配与释放内存的函数缺点: void *malloc(size_t size); void *calloc(size_t nmemb,size_t size);void *realloc(void *ptr, size_t size);void free(void *ptr);缺点1: 高并发时较小内存块使用导致系统调用频繁,降低了系统的执行效率 缺点2: 频繁使用时增加了系统…

【.Net 6.0--通用帮助类--EmailHelper】

前言 邮件帮助类&#xff08;smtp协议&#xff09;&#xff0c;需要NuGet引用MailKit包&#xff0c;包含了同步发送邮件&#xff08;SendEmail)、异步发送邮件&#xff08; SendEmailAsync&#xff09;方法&#xff0c;由于非企业邮箱每日有发送限额&#xff0c;故代码中支持轮…

(C语言)精确计算程序运行时间的方法

一、先计算每秒多少个计数 typedef __int64 s64;s64 tps; /* timestamp counter per second */s64 get_tps(void) {s64 t0 rdtsc();Sleep(100);return (rdtsc() - t0) * 10; } 这段代码定义了一个函数 get_tps&#xff0c;该函数用于测量处理器的时间戳计数器&#xff08;RD…

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透)

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF&#xff08;网络安全渗透&#xff09; 全国职业院校技能大赛高职组信息安全管理与评估 &#xff08;赛项&#xff09; 评分标准 第三阶段 夺旗挑战CTF&#xff08;网络安全渗透&#xff09; *竞赛项目赛题* 本文…

柔性数组(结构体成员)

目录 前言&#xff1a; 柔性数组&#xff1a; 给柔性数组分配空间&#xff1a; 调整柔性数组大小&#xff1a; 柔性数组的好处&#xff1a; 前言&#xff1a; 柔性数组&#xff1f;可能你从未听说&#xff0c;但是确实有这个概念。听名字&#xff0c;好像就是柔软的数…

如何连接到 Azure SQL 数据库(下)

在《如何连接到 Azure SQL 数据库&#xff08;上&#xff09;》中&#xff0c;我们已经了解到了以下内容↓↓↓ 开始之前&#xff1a;Azure 连接凭据和防火墙 如何检索 Azure 连接凭据如何配置服务器防火墙使用 SQL Server Management Studio 连接到 Azure使用 dbForge Studio…

数据结构--稀疏矩阵及Java实现

一、稀疏 sparsearray 数组 1、先看一个实际的需求 编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0, 因此记录了很多没有意义的数据.->稀疏数组。 2、稀疏数组基本介绍 当一个数组中大部分元素为&#xff10;…

wordpress安装之正式开始安装wordpress

1、拉取wordpress镜像 docker pull wordpress 2、启动容器 启动容器&#xff0c;设置容器名为wordpress2并把80端口映射到宿主机的9988端口 docker run -it --name wordpress2 -p 9988:80 -d wordpress 3、查看容器状态 docker ps 4、安装wordpress博客程序 因为我们前面启…

微信小程序---使用npm包安装Vant组件库

在小程序项目中&#xff0c;安装Vant 组件库主要分为如下3步: 注意&#xff1a;如果你的文件中不存在pakage.json&#xff0c;请初始化一下包管理器 npm init -y 1.通过 npm 安装(建议指定版本为1.3.3&#xff09; 通过npm npm i vant/weapp1.3.3 -S --production 通过y…

大数据技术14:FlinkCDC数据变更捕获

前言&#xff1a;Flink CDC是Flink社区开发的flink-cdc-connectors 组件&#xff0c;这是⼀个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。 https://github.com/ververica/flink-cdc-connectors 一、CDC 概述 CDC 的全称是 Change …