[USACO23FEB] Equal Sum Subarrays G

news2024/9/29 5:36:01

题目描述

FJ gave Bessie an array aa of length N ( 2 ≤ N ≤ 500 , − 1 0 15 ≤ a i ≤ 1 0 15 ) N(2≤N≤500,−10^{15}≤ai≤10^{15}) N(2N500,1015ai1015) with all N ( N + 1 ) 2 \frac{N(N+1)}2 2N(N+1)​ contiguous subarray sums distinct. For each index i ∈ [ 1 , N ] i∈[1,N] i[1,N], help Bessie compute the minimum amount it suffices to change ai by so that there are two different contiguous subarrays of a with equal sum.

翻译

给定长度为 N N N 的数组 a a a 2 ≤ N ≤ 500 , − 1 0 15 ≤ a i ≤ 1 0 15 2≤N≤500,−10^{15}≤ai≤10^{15} 2N500,1015ai1015), a a a 中所有 N ( N + 1 ) 2 \frac{N(N+1)}2 2N(N+1)​ 个连续子段和互不相等。对于每个 i ∈ [ 1 , N ] i\in[1,N] i[1,N],把 a i a_i ai 修改成一个值,使得存在两个不同的连续子段,它们的和相等,且改值与 a i a_i ai 的差最小,求出这个差。

题解

发现 N ≤ 500 N\le500 N500,大胆猜测时间复杂度 O ( N 3 ) O(N^3) O(N3)

对于每个连续子段 [ l , r ] [l,r] [l,r],将它的左右端点与子段和保存,按照子段和从小到大的顺序排序。预处理的时间复杂度是 O ( N 2 log ⁡ N ) O(N^2\log N) O(N2logN) 的。

回答询问时,对于 i i i,把所有包含 i i i 的连续子段标记。

下面画图帮助理解。

在这里插入图片描述
上面的表格表示 s u m sum sum 的大小,红色表示被标记的子段和所在的位置,蓝色是未标记的。

题目中把 a i a_i ai 修改,其实等价于在这个表格中把所有红色的位置整体平移;
若存在两个不同的连续子段,它们的和相等,就是平移后存在某个红色的位置与原先一个蓝色的位置重合。
使二者重合的平移量是多少呢?即为相邻两个颜色不同的位置距离最小值。

于是只要用 O ( N 2 ) O(N^2) O(N2) 的时间标记和求最小值。

总的时间复杂度为 O ( N 3 ) O(N^3) O(N3)

下为赛时代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=501;
int n,cnt,bj[(N-1)*N/2+1];
ll a[N],sum[N],b[N][N];
struct node
{
    int l,r;
    ll sum;
    node(){}
    node(int x,int y,ll z){l=x,r=y,sum=z;}
    bool operator<(const node &a)const{
        return sum<a.sum;
    }
}czn[(N-1)*N/2+1];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            czn[++cnt]=node(i,j,sum[j]-sum[i-1]);
        }
    }
    sort(czn+1,czn+1+cnt);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=cnt;j++){
            if(czn[j].l<=i&&i<=czn[j].r){
                bj[j]=1;
            }
        }
        ll minn=1e18;
        for(int j=1;j<cnt;j++){
            if(bj[j]^bj[j+1]){
                minn=min(minn,abs(czn[j].sum-czn[j+1].sum));
            }
        }
        memset(bj,0,sizeof(bj));
        printf("%lld\n",minn);
    }
}

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

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

相关文章

【随手记】使用Flask做代理为虚拟机提供pip源

最近在重做虚拟机环境&#xff0c;虚拟机不可连外网&#xff0c;最初python包都是通过离线whl进行安装。但是离线文件已经找不到了&#xff0c;不想重新去一个个下载&#xff0c;而且本地环境跟虚拟机环境也不一致&#xff0c;pip download可能会遇到版本问题&#xff0c;遂考虑…

【SQL】群辉 NAS 安装 Mysql 远程访问连接

群辉安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一个优秀的数据管理和分析环境。同时具有良好的硬件性能和稳定性&#xff0c;可以保障MySQL数据库的高效运行和数据安全. cpolar 是一款内网穿透工具,通过简单的设置,我们即可实现远程访问群辉中mysq…

地下饮用水除硝酸盐技术、生活用水提质增效

项目名称 北京某地下水除硝酸盐项目&#xff0c;出水未检出 工艺选择 两处水源&#xff0c;运行方式为一用一备 工艺原理 树脂官能团耐受硫酸盐、氯离子的干扰&#xff0c;实现选择性吸附硝酸根 项目背景 近年来由于农业活动及排污物的影响&#xff0c;部分地表…

qt---应用窗口创建

运行结果&#xff1a; 此处仅显示widget.cpp文件的代码 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setFixedSize(500,500); //设置固定尺寸this->setWindowTitle("QQ2024");//设置标题this->setWindowIcon(Q…

c++语言基本语法

今天&#xff0c;我带来c语言基本语法。互联网流行着一个段子&#xff0c;求职者在自己的简历上写精通c&#xff0c;面试官看完以后&#xff0c;微微一笑&#xff0c;疯狂拷问&#xff0c;最后&#xff0c;求职的人回答不出来一两个问题。正如段子所表达的意思&#xff0c;c语言…

【Java基础】CAS (Compare And Swap) 操作

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用场景四、原理五、优劣5.1 缺点&#xff1…

【Linux之拿捏信号2】核心转储文件core dump

文章目录 核心转储文件的概念ulimit命令Term和core 核心转储文件的概念 Linux系统级别提供了一种能力&#xff0c;在一个进程出现异常的时候&#xff0c;OS可以将该异常进程的核心代码部分进行核心转储&#xff0c;将内存中进程的相关代码数据&#xff0c;全部dump到磁盘中&am…

飞桨出海!百度飞桨携手联合国教科文组织共促全球高等教育数字化进程

百度飞桨响应联合国教科文组织&#xff0c;积极践行“共商、共建、共享”的全球合作理念&#xff0c;紧跟全球教育创新的步伐&#xff0c;推出面向全球高校教学人员的微认证英文课程——《AI科普与零代码实践》。百度基于丰厚的人工智能技术沉淀打造了本系列课程&#xff0c;携…

DRF+Vue.JS前后端分离项目实例(上):使用 Django-Rest-Framework快速实现 RESTful API 接口编程

1. RESTFul API 接口需求及设计 本文以学生信息查询功能为例&#xff0c;采用前后端分离架构&#xff0c;要求后端提供RESTFul 接口。 1.1 本例要求提供如下查询功能&#xff1a; 列表查询、单条查询添加学生信息更改学生信息删除学生信息 1.2 数据库student表结构如下&…

2.3 Web应用 -1 web 应用概述

2.3 Web应用 -1 web 应用概述 Web与HTTPHTTP协议概述 Web与HTTP World Wide Web: Tim Berners-Lee 网页网页互相链接 网页(Web Page)包含多个对象(objects) 对象&#xff1a;HTML文件、JPEG图片、视频文件、动态脚本等基本HTML文件&#xff1a;包含对其他对象引用的链接 对象的…

ValueError: No engine for filetype: ‘‘

目录 pandas 导出数据时报错 解决办法 很简单的原因&#xff0c;一开始我直接百度&#xff0c;发现没有搜到结果&#xff0c;在此记录一下 保存时&#xff0c;文件名结尾没加xlsx&#xff01;&#xff01;&#xff01; 保存其他格式时&#xff0c;文件名里也要记得加上对应后缀…

【C语言进阶(五)】指针进阶详解(上)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C语言学习分享⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C语言知识   &#x1f51d;&#x1f51d; 指针进阶 1. 前言 2. 字符指针 2.…

一个 NPM 包,帮助数十万程序员提高数十倍效率,难道不开源出来?(一)

我就知道你会点进来看看&#xff0c;吹牛逼的&#xff0c;哈哈&#xff0c;不过呢&#xff0c;我正在朝着这个方向前进&#xff0c;希望大家给我鼓励鼓励&#xff0c;希望点击进来小伙伴点点赞&#xff0c;点点关注。 说实话&#xff0c;写这个项目的目的&#xff0c;从我自己写…

ANSYS ACT插件开发基本流程

开发实施路线 以ACT仿真向导的开发为例&#xff0c;整体可以分为IronPython脚本开发和XML界面开发两个阶段&#xff1b;实际上所有的ANSYS产品的仿真向导开发都是遵循相同的路线流程。此外&#xff0c;另外两种类型的ACT插件开发路线亦是如此。 如何去学习 脚本开发是ACT插件…

再度进化,ChatGLM2-6B详细学习实践记录与资料分享

ChatGLM-6B是清华大学基础研究团队前一段时间开源出来的大模型&#xff0c;一经推出就得到了广泛的使用和推广&#xff0c;在我前面的博文中结合我自己的学习实践经历&#xff0c;已经详细的总结记录了一下&#xff0c;感兴趣或者是有需要的朋友可以自行获取即可&#xff0c;如…

【Linux】-Linux基本指令

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Linux】 分享: 屋檐如悬崖 风铃如沧海 我等燕归来 时间被安排 演一场意外 你悄然走开 故事在城外 浓雾散不开 看不清对白 你听不出来 风声不存在 是我在感慨 梦想来是谁在窗台 …

初步尝试调试postgresql源码

准备用VS2005和postgresql 8.x或9.0&#xff0c;搭建源码调试环境&#xff1b; 不成功&#xff1b;结果如下&#xff1b; 把下面文件中用#连着注释掉7行&#xff0c;然后加上一句 $self->{vcver} 8.00; 得到上面结果&#xff1b;如果不改的话上面的结果也没有&#xff1b;…

恒生电子探路金融大模型

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近日&#xff0c;恒生电子和旗下子公司恒生聚源正式发布基于大语言模型技术打造的数智金融新品&#xff1a;金融智能助手光子和全新升级的智能投研平台WarrenQ。此外&#xff0c;恒生电子金融行业大模型LightGPT也首次对外亮…

硬件电路设计--运算放大器(三)应用一

文章目录 前言示例1示例2 一、反向比例反向比例改进版对平衡电阻R的讨论 二、同向比例三、电压跟随器四、加法运算电路4.1 反向加法电路4.2 同加法电路4.3 特殊应用 五、减法运算电路六、积分电路七、微分电路八、对数和指数运算电路8.1 对数8.2 指数 九、测量放大电路&#xf…

基于matlab根据一系列图像估计单个校准相机的轨迹(附源码)

一、前言 视觉里程计是通过分析一系列图像来确定相机的位置和方向的过程。视觉里程计用于各种应用&#xff0c;例如移动机器人、自动驾驶汽车和无人机。此示例说明如何根据一系列图像估计单个校准相机的轨迹。 此示例演示如何从一系列二维视图估计校准相机的轨迹。此示例使用…