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

Day24 洛谷普及2004(内涵前缀和与差分算法)

零基础洛谷刷题记录

Day01 2024.11.18
Day02 2024.11.25
Day03 2024.11.26
Day04 2024.11.28
Day05 2024.11.29
Day06 2024 12.02
Day07 2024.12.03
Day08 2024 12 05
Day09 2024.12.07
Day10 2024.12.09
Day11 2024.12.10
Day12 2024.12.12
Day13 2024.12.16
Day14 2024.12.17
Day15 2024.12.18
Day16 2024.12.19
Day17 2024.12.21
Day18 2024.12.23
Day19 2024.12.24
Day20 2024.12.25
Day21 2024.12.26
Day22 2025.01.19
Day23 2025.01.21
Day24 2025.02.01


文章目录

  • 零基础洛谷刷题记录
    • 2004:题目描述
    • 2004:AC代码
    • 2004:学习成果
    • 算法:一维前缀和
    • 算法:一维差分
    • 算法:二维前缀和
    • 算法:二维差分
    • 2004:代码优化


领地选择

2004:题目描述

作为在虚拟世界里统帅千军万马的领袖,小 Z 认为天时、地利、人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小 Z 来说是非常重要的。
首都被认为是一个占地 C×C 的正方形。小 Z 希望你寻找到一个合适的位置,使得首都所占领的位置的土地价值和最高。

2004:AC代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{static int arr[1005][1005];int ditu_kuan, ditu_chang, shoudu_bianchang;scanf("%d %d %d", &ditu_kuan, &ditu_chang, &shoudu_bianchang);for (int i = 1; i <= ditu_kuan; i++){for (int j = 1; j <= ditu_chang; j++){scanf("%d", &arr[i][j]);}}int shoudu_hang = 0, shoudu_zhong = 0;int max = 0;for (int i = 1; i <= ditu_chang - shoudu_bianchang + 1;i++){for (int j = 1; j <= ditu_kuan - shoudu_bianchang + 1;j++){int jiazhi = 0;int hang = i;while (hang <= i + shoudu_bianchang - 1){int lie = j;while (lie < j + shoudu_bianchang){jiazhi += arr[hang][lie];lie++;}hang++;}if (jiazhi > max){shoudu_hang = i;shoudu_zhong = j;max = jiazhi;}}}printf("%d %d\n", shoudu_hang, shoudu_zhong);return 0;
}

2004:学习成果

  • 是一道简单的比较题,但是对时间复杂度如何优化呢

一维前缀和

算法:一维前缀和

  • 对于数组arr={1,3,7,5,2},进行q次询问,例如询问【2,4】、【0,3】、【3,4】求和,会有几个数的和进行了重复的计算,时间复杂度是0(nq)
  • 前缀和数组的撰写:

> 若 arr={13752}
> 则 sum{11+3=47+4=1111+5=1616+2=18}
> 其中sum【i】=sum【0+sum【1+...+sum【i】=sum【i-1+arr【i】
> 由此得到arr【i】+arr【i+1+...+arr【j】=sum【j】-sum【i-1

一维差分

算法:一维差分

  • 对于数组arr={1,3,7,5,2},进行m次操作,给区间【i,j】中的每个元素都+value,并询问arr的更新结果,复杂度为O(mn)
  • 优化思路:由于我们只关心各种操作的结果,而不关心过程(例如对a-5+3+1-2其实就是a-3)
  • 引入差分数组
> 对于arr={13752}
> 差分数组d={124-2-3}
> 观察前缀和数组sum_d={1,3,4,7,2}
> 总结:前缀和是差分的逆运算
  • 差分标记
[L,R]+value = d[L]+value,d[R+1]+value//中间都+ value 所以中间差分是不变的,d[R+1]可能不存在
此时时间复杂度变为O(2m+n)

二维前缀和

算法:二维前缀和

  • 对于二维矩阵arr【10】【10】,若想计算由arr【2】【2】和arr【5】【5】围成的矩阵元素的和,原始做法就是一个一个累加,时间复杂度为O(mn)
  • 优化思路:利用二维前缀和将问题转化为【0,0】到【i,j】的提取算好的简单计算
  • 计算公式
sum(【i】【j】到【m】【n】)=sum【m】【n】-sum【i-1】【j】-sum【i】【j-1+sum【i-1】【j-1//没写哪到哪,默认(0,0),注意i-1和j-1的越界情况,也可以把下标从1开始避免越界的问题
  • 二维前缀和数组的构造
就是利用上面的计算公式即可得到

算法:二维差分

  • 对于二维矩阵arr【10】【10】,若想计算由arr【2】【2】和arr【5】【5】围成的矩阵元素都+3,再将由arr【1】【1】和arr【3】【4】围成的矩阵元素都-6,原始做法就是一个一个加,再一个一个减,时间复杂度为O(mn)
  • 优化思路:利用差分进行差分标记,将内部的加减转化为差分边界的加减
  • 差分标记的影响:将d【i】【j】+1,会导致d【i】【j】的右下角矩阵元素都+1
  • 差分标记的公式:
在n×n的矩阵中,将arr【i】【j】到arr【m】【l】的元素都+value,则
d【i】【j】+value
d【i】【l+1-value
d【m+1】【j】-value
d【m+1】【l+1+value

2004:代码优化

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<math.h>int main()
{static long long int arr[1005][1005];int ditu_kuan, ditu_chang, shoudu_bianchang;scanf("%d %d %d", &ditu_kuan, &ditu_chang, &shoudu_bianchang);for (int i = 1; i <= ditu_kuan; i++){for (int j = 1; j <= ditu_chang; j++){scanf("%lld", &arr[i][j]);}}//构建二维前缀和数组static long long int sum[1005][1005] = { 0 };for (int i = 1; i <= ditu_kuan; i++){for (int j = 1; j <= ditu_chang; j++){sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + arr[i][j];}}int shoudu_hang = 0, shoudu_zhong = 0;long long int max = 0;for (int i = shoudu_bianchang; i <= ditu_chang; i++){for (int j = shoudu_bianchang; j <= ditu_kuan; j++){if (sum[i][j] - sum[i][j - shoudu_bianchang] - sum[i - shoudu_bianchang][j] + sum[i - shoudu_bianchang][j - shoudu_bianchang] > max){shoudu_hang = i - shoudu_bianchang + 1;shoudu_zhong = j - shoudu_bianchang + 1;max = sum[i][j] - sum[i][j - shoudu_bianchang] - sum[i - shoudu_bianchang][j] + sum[i - shoudu_bianchang][j - shoudu_bianchang];}}}printf("%lld %lld\n", shoudu_hang, shoudu_zhong);return 0;
}
  • 记得开long long

相关文章:

Day24 洛谷普及2004(内涵前缀和与差分算法)

零基础洛谷刷题记录 Day01 2024.11.18 Day02 2024.11.25 Day03 2024.11.26 Day04 2024.11.28 Day05 2024.11.29 Day06 2024 12.02 Day07 2024.12.03 Day08 2024 12 05 Day09 2024.12.07 Day10 2024.12.09 Day11 2024.12.10 Day12 2024.12.12 Day13 2024.12.16 Day14 2024.12.1…...

遗传算法与深度学习实战(33)——WGAN详解与实现

遗传算法与深度学习实战&#xff08;33&#xff09;——WGAN详解与实现 0. 前言1. 训练生成对抗网络的挑战2. GAN 优化问题2.1 梯度消失2.2 模式崩溃 2.3 无法收敛3 Wasserstein GAN3.1 Wasserstein 损失3.2 使用 Wasserstein 损失改进 DCGAN 小结系列链接 0. 前言 原始的生成…...

gitlab云服务器配置

目录 1、关闭防火墙 2、安装gitlab 3、修改配置 4、查看版本 GitLab终端常用命令 5、访问 1、关闭防火墙 firewall-cmd --state 检查防火墙状态 systemctl stop firewalld.service 停止防火墙 2、安装gitlab xftp中导入安装包 [rootgitlab ~]#mkdir -p /service/tool…...

SAP SD学习笔记27 - 请求计划(开票计划)之1 - 定期请求(定期开票)

上两章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约和金额契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约_sap 框架协议-CSDN博客 SAP SD学习笔记27 - 贩卖契约(框架…...

HTML DOM 修改 HTML 内容

HTML DOM 修改 HTML 内容 引言 HTML DOM(文档对象模型)是浏览器内部用来解析和操作HTML文档的一种机制。通过DOM,我们可以轻松地修改HTML文档的结构、样式和行为。本文将详细介绍如何使用HTML DOM来修改HTML内容,包括元素的增删改查、属性修改以及事件处理等。 1. HTML …...

基于VMware的ubuntu与vscode建立ssh连接

1.首先安装openssh服务 sudo apt update sudo apt install openssh-server -y 2.启动并检查ssh服务状态 到这里可以按q退出 之后输入命令 &#xff1a; ip a 红色挡住的部分就是我们要的地址&#xff0c;这里就不展示了哈 3.配置vscode 打开vscode 搜索并安装&#xff1a;…...

Flutter Candies 一桶天下

| | | | | | | | 入魔的冬瓜 最近刚入桶的兄弟&#xff0c;有责任心的开发者&#xff0c;对自己的项目会不断进行优化&#xff0c;达到最完美的状态 自定义日历组件 主要功能 支持公历&#xff0c;农历&#xff0c;节气&#xff0c;传统节日&#xff0c;常用节假日 …...

maven如何不把依赖的jar打包到同一个jar?

spring boot项目打jar包部署&#xff1a; 经过以下步骤&#xff0c; 最终会形成maven依赖的多个jar&#xff08;包括lib下添加的&#xff09;、 我们编写的程序代码打成一个jar&#xff0c;将程序jar与 依赖jar分开&#xff0c;便于管理&#xff1a; success&#xff1a; 最终…...

HTML5 技术深度解读:本地存储与地理定位的最佳实践

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…...

AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解

在AIGC&#xff08;人工智能生成内容&#xff09;技术中&#xff0c;“嵌入转换到同一个向量空间中”是一个核心概念&#xff0c;其主要目的是将不同类型的输入数据&#xff08;如文本、图像、音频等&#xff09;映射到一个统一的连续向量空间中&#xff0c;从而实现数据之间的…...

【机器学习理论】朴素贝叶斯网络

基础知识&#xff1a; 先验概率&#xff1a;对某个事件发生的概率的估计。可以是基于历史数据的估计&#xff0c;可以由专家知识得出等等。一般是单独事件概率。 后验概率&#xff1a;指某件事已经发生&#xff0c;计算事情发生是由某个因素引起的概率。一般是一个条件概率。 …...

Docker 部署 GLPI(IT 资产管理软件系统)

GLPI 简介 GLPI open source tool to manage Helpdesk and IT assets GLPI stands for Gestionnaire Libre de Parc Informatique&#xff08;法语 资讯设备自由软件 的缩写&#xff09; is a Free Asset and IT Management Software package, that provides ITIL Service De…...

【Vaadin flow 实战】第5讲-使用常用UI组件绘制页面元素

vaadin flow官方提供的UI组件文档地址是 https://vaadin.com/docs/latest/components这里&#xff0c;我简单实战了官方提供的一些免费的UI组件&#xff0c;使用案例如下&#xff1a; Accordion 手风琴 Accordion 手风琴效果组件 Accordion 手风琴-测试案例代码 Slf4j PageT…...

强化学习 DAY1:什么是 RL、马尔科夫决策、贝尔曼方程

第一部分 RL基础&#xff1a;什么是RL与MRP、MDP 1.1 入门强化学习所需掌握的基本概念 1.1.1 什么是强化学习&#xff1a;依据策略执行动作-感知状态-得到奖励 强化学习里面的概念、公式&#xff0c;相比ML/DL特别多&#xff0c;初学者刚学RL时&#xff0c;很容易被接连不断…...

理解神经网络:Brain.js 背后的核心思想

温馨提示 这篇文章篇幅较长,主要是为后续内容做铺垫和说明。如果你觉得文字太多,可以: 先收藏,等后面文章遇到不懂的地方再回来查阅。直接跳读,重点关注加粗或高亮的部分。放心,这种“文字轰炸”不会常有的,哈哈~ 感谢你的耐心阅读!😊 欢迎来到 brain.js 的学习之旅!…...

【Docker】dockerfile识别当前构建的镜像平台

在编写dockerfile的时候&#xff0c;可能会遇到需要针对不同平台进行不同操作的时候&#xff0c;这需要我们对dockerfile进行针对性修改。 比如opencv的依赖项libjasper-dev在ubuntu18.04上就需要根据不同的平台做不同的处理&#xff0c;关于这个库的安装在另外一篇博客里面有…...

【VM】VirtualBox安装CentOS8虚拟机

阅读本文前&#xff0c;请先根据 VirtualBox软件安装教程 安装VirtualBox虚拟机软件。 1. 下载centos8系统iso镜像 可以去两个地方下载&#xff0c;推荐跟随本文的操作用阿里云的镜像 centos官网&#xff1a;https://www.centos.org/download/阿里云镜像&#xff1a;http://…...

【C++篇】哈希表

目录 一&#xff0c;哈希概念 1.1&#xff0c;直接定址法 1.2&#xff0c;哈希冲突 1.3&#xff0c;负载因子 二&#xff0c;哈希函数 2.1&#xff0c;除法散列法 /除留余数法 2.2&#xff0c;乘法散列法 2.3&#xff0c;全域散列法 三&#xff0c;处理哈希冲突 3.1&…...

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…...

边缘检测算法(candy)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 Canny 边缘检测的步骤 1. 灰度转换 如果输入的是彩色图像&#xff0c;则需要先转换为 灰度图像&#xff0c;因为边缘检测通常在单通道图像上进行。 2. 高斯滤波&#xff08;Gaussian Blur&#xff09; 由于边缘…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...