蓝桥杯算法笔记|前缀和3382、3419

news/2025/1/30 20:49:58/

!前倾回顾

(一)进制转换
  • 任意进制转化成十进制
  • int x=0;//存放结果
    int k;//k存放当前进制
    int a[];//存放当前数拆解成的每位数
    for(int i=0;i<a.size();i++){x=x*k+a[i];
    }
    cout<<x<<'\n'
  • 十进制转化成任意进制
  • string s;//存放结果
    //已知十进制x
    int k,i=0;//转化成K进制
    int ch[]={'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    while(x){s[i]=x%k;x=x/k;
    }
    reverse(s.begin(),s.end());
    count<<s<<'\n';

一、前缀和 

在C++中,前缀和(Prefix Sum)技术通常用于加速某些类型的查询或计算,特别是在处理数组或序列时。这种技术特别适用于需要频繁查询某个区间内元素之和的问题。下面是一些关于如何理解和使用前缀和的指导:

什么是前缀和?

前缀和指的是对于一个给定的数组arr[],创建一个新的数组prefixSum[],其中prefixSum[i]是原数组从第一个元素到第i个元素(包含)的所有元素之和。

例如,给定数组arr = {1, 2, 3, 4, 5},其对应的前缀和数组prefixSum将是{1, 3, 6, 10, 15}。

如何构建前缀和数组?

假设你有一个数组arr[],你可以通过以下方式构建前缀和数组prefixSum[]:

int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr)/sizeof(arr[0]);
int prefixSum[n];prefixSum[0] = arr[0];
for(int i = 1; i < n; ++i){prefixSum[i] = prefixSum[i-1] + arr[i];
}


应用场景

快速求解区间和:给定两个索引i和j,要找到从i到j之间所有元素的和,可以简单地使用prefixSum[j] - prefixSum[i-1](如果i > 0),或者直接为prefixSum[j](如果i == 0)。这使得原本可能需要O(n)时间复杂度的操作降低到了O(1),前提是前缀和数组已经被计算好。
优化动态规划问题:在某些情况下,利用前缀和可以在状态转移方程中减少重复计算,从而优化算法性能。
二维前缀和:在处理二维数组时,可以通过类似的思路计算二维前缀和,以便于快速查询子矩阵的和。

二、前缀和题目练习

题目:https://www.lanqiao.cn/problems/3382/learning

 

   

解题误区:

  • 每次都重新K次方,超时!!!
  • 直接将1~5所有的次方情况一次算出来!这些次方数像前缀和和一样不会因为输入的数值而改变。

 解题代码:

 (太裂开了这道题,折磨了我一下午,下边是参考着敲的最优解)

#include<bits/stdc++.h>
#include<cmath>
using namespace std;
const long Q=1e9+7;
int main(){int n,m;cin>>n>>m;int a[n];//必须输入了n之后才能定义a【n】,最后卡在了这里for(int i=0;i<n;i++){cin>>a[i]; }long long sum[6][n+1];//算sum前缀和 //1、既实现了K次方,又实现了求前缀和,取模 //2、注意,这里的i是 for(int i=1;i<6;i++){for(int j=1;j<=n;j++){sum[i][j]=sum[i][j-1]+pow(a[j-1],i);sum[i][j]=sum[i][j]%Q;} } for(int i=0;i<m;i++){int l,r,k;cin>>l>>r>>k;long res=(sum[k][r]+Q-sum[k][l-1])%Q;cout<<res<<'\n';} return 0;
} 

3419https://www.lanqiao.cn/problems/3419/learning

没想到咋用前缀和。

出现找“区间 ”的可能会用到前缀和


http://www.ppmy.cn/news/1567977.html

相关文章

c++-------------------------继承

1.继承的概念和定义 1.1继承的概念 继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段&#xff0c;它允许我们在保持原有 类特性的基础上进⾏扩展&#xff0c;增加⽅法(成员函数)和属性(成员变量)&#xff0c;这样产⽣新的类&#xff0c;称派⽣类。继承 呈…

数据结构---哈希表

基本概念 哈希函数&#xff08;Hash Function&#xff09;是一种将输入的数据&#xff08;通常是任意大小的&#xff09;映射到固定大小的输出&#xff08;通常是一个固定长度的值&#xff09;的函数。这个输出值通常称为“哈希值”&#xff08;Hash Value&#xff09;或“哈希…

CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)

CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本) 文章目录 CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)0.前言1.准备工作1.1.安装CLion1.2.下载STM32环境依赖1.2.1.STM32CubeMX1.2.2.OpenOCD1.2.3.MinGW1.2.4.GNU Arm Embedded Toolchain 1.3.下载ESP32环境依赖1.3.1…

AI软件栈:LLVM分析(一)

文章目录 AI 软件栈后端编译LLVM IRLLVM的相关子项目AI 软件栈后端编译 AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM具备多阶段优化能力提供基础后端描述,便于进行编译器开发兼容标准编译器的行为LLVM …

Baklib引领数字化内容管理转型提升企业运营效率

内容概要 在数字化迅速发展的背景下&#xff0c;企业正面临着前所未有的内容管理挑战。传统的内容管理方式已难以适应如今的信息爆炸&#xff0c;企业需要更加高效、智能的解决方案以应对复杂的数据处理需求。Baklib作为行业的先锋&#xff0c;以其创新技术对数字化内容管理进…

软考信安27~Windows操作系统安全相关

1、Windows账户与组管理 1.1、用户账户查看 whoami #查看当前登录的用户名称 whoami /all #查看当前系统的用户名和组信息,以及SID whoami /user #查看当前用户的SID net user #查看系统中包含哪些用户 wmic useraccount get name,sid #查看…

定时任务Spring Task双向数据传输WebSocket

之前的代码已完成基础功能&#xff0c;但仍有一些逻辑未完善&#xff1a; 定时任务&#xff1a; 用户下单15分钟后仍未支付&#xff0c;订单判定为超时。status应修改为6(已取消)。管理端忘记点击"完成"&#xff0c;使订单长时间处于"派送中"状态。系统需…

2021 年 6 月大学英语四级考试真题(第 2 套)——纯享题目版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大学MBA在读&#xff0c;也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &…