XMOJ3376 结界

news/2025/1/16 5:41:36/

很憨憨的题,想复杂了,是这场比赛四道题中难度第二的,可却是我唯一没做出来的题,挡了我的AK路。(发怒)(难得过一次最难题)

题目大意

有一个环,第 i i i 个位置上有 a i a_i ai 个物品,定义一次操作为将一个位置上的一个物品移动到其相邻两个位置之一,求最少的操作次数使得第 i i i 个位置上有 b i b_i bi 个物品。

n ≤ 1 0 5 n≤10^5 n105 a , b ≤ 1000 a,b≤1000 a,b1000

题解

先讲讲我赛时磕这题的心路历程。读完题发现 a , b a,b a,b 范围不大,所以一直在把复杂度往 a , b a,b a,b 上靠,然后一直往 dp 那个方向想,然后就憨完了。看了题解才发现很不牛,感觉如果 a , b a,b a,b 范围改成 1 0 9 10^9 109 赛时应该就会做了……

先考虑如果是一条链怎么做,很显然是贪心的去搞他,对于每个位置若是 a a a b b b 大就把多余部分弄出来,若是少就把多出来的部分搞进去。统计答案时只需要算一下每条边需要经过几个物品即可。(以上便是我赛时想出来的部分和正解的交集。)

再考虑变成环,其实也就是往1和n之间加了条边,我们假设这条边经过了 x x x 个物品(为正则从1到n方向,否则从n到1方向),那么1的物品数量就变成了 a 1 − x a_1-x a1x,1还需要的物品数量就是 b 1 − a 1 + x b_1-a_1+x b1a1+x(为正则给出去)。而此时只有2连向1的边能移动物品(因为1到n的边通过的物品数量已经被钦定好了),所以这条边所需要通过的物品数量就是 b 1 − a 1 + x b_1-a_1+x b1a1+x,然后2的物品数变成了 a 2 − b 1 + a 1 − x a_2-b_1+a_1-x a2b1+a1x,2还需要的物品数量就是 b 2 − a 2 + b 1 − a 1 + x b_2-a_2+b_1-a_1+x b2a2+b1a1+x,而此时只有3连向2的边能移动物品,所以这条边通过的物品数量就是 b 2 − a 2 + b 1 − a 1 + x b_2-a_2+b_1-a_1+x b2a2+b1a1+x……以此类推,我们可以算出每条边通过的物品数。

最后的答案就是每条边通过的物品数绝对值相加,发现每条边通过的物品数除了 x x x 以外都是一个常量,不妨设为 c i c_i ci,那么结果就是 ∑ ∣ c i + x ∣ = ∑ ∣ c i − ( − x ) ∣ \sum |c_i+x|=\sum |c_i-(-x)| ci+x=ci(x),然后就是很经典的问题,直接取中位数即可。

复杂度可以 O ( n ) O(n) O(n),但取中位数我为了方便用了 sort 所以是 O ( n l o g n ) O(nlogn) O(nlogn)

Code

代码巨简洁。

#include<bits/stdc++.h>
using namespace std;const int N=1e5+5;
typedef long long ll;int n,m,a[N],b[N],c[N];
ll ans;int main(){freopen("border.in","r",stdin);freopen("border.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);c[1]=0;for(int i=2;i<=n;i++)c[i]=c[i-1]+b[i-1]-a[i-1];sort(c+1,c+1+n);if(n&1) m=c[(n+1)/2];else m=(c[n/2]+c[n/2+1])/2;for(int i=1;i<=n;i++)ans+=abs(c[i]-m);printf("%lld",ans);return 0;
}

有一种输给了绿题的耻辱感,所以遇到这种数据范围开小了被误导的题有什么解决办法吗?


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

相关文章

UQpy | 不确定性量化Python工具箱推荐

UQpy, "Uncertainty Quantification with Python,"是一个通用的 Python 工具箱&#xff0c;用于对物理和数学系统模拟中的不确定性进行建模。该代码被组织为一组以不确定性量化&#xff08;UQ&#xff09;的核心功能为中心的模块&#xff0c;如下所示。这些模块各不相…

ai 回答HFS是什么 HTTP的文件服务器是什么

HFS&#xff08;HTTP File Server&#xff09;是一个基于HTTP协议的文件服务器软件&#xff0c;它允许用户通过浏览器访问和共享计算机上的文件。HFS的特点包括界面简洁直观、易于安装和配置、支持虚拟文件系统、多种权限设置等。用户可以轻松地在本地网络或互联网上共享文件和…

【STM32 Blue Pill编程】-定时器PWM模式

定时器PWM模式 文章目录 定时器PWM模式1、定时器PWM模式介绍2、硬件准备及接线3、模块配置4、代码实现在文中,我们将介绍如何使用 STM32 Blue Pill 定时器的PWM模式以及如何配置它们以生成具有不同占空比和频率的信号。 我们将使用 LED调光器示例来演示如何使用 STM32Cube IDE…

贪吃蛇项目实现(C语言)——附源码

前言 贪吃蛇是一款十分经典的游戏&#xff0c;其通过控制贪吃蛇的上下左右移动来吃食物&#xff0c;延长自己的身体&#xff0c;也会因为撞到墙体和自身而死亡。下面我们通过C语言来实现贪吃蛇。 1.技术要点 C语言枚举&#xff0c;结构体&#xff0c;链表&#xff0c;动态内…

Flutter动画—雷达扫描效果

前言 我们现在要用Flutter做一个雷达扫描的动画,如下图所示 需求分析 需要在画布上画出三个同心圆和一个十字创建一个固定角度的圆弧圆弧做渐变色让圆弧动起来封装组件&#xff0c;将圆弧角度、圆弧颜色、几个同心圆与十字颜色 实现步骤 1.创建一3个同心圆与十字 class Ri…

汽车免拆诊断案例 | 沃尔沃V40 1.9TD断续工作

故障现象 一辆04款的沃尔沃V40 1.9 TD&#xff0c;发动机代码D4192T3&#xff0c;使用博世EDC15C发动机管理。客户说车子断续工作&#xff0c;怀疑是正时皮带出现问题。卸下上皮带盖&#xff0c;检查发现皮带仍然在原来的位置上并且没有出现松动。起动发动机&#xff0c;车辆能…

音视频入门基础:AAC专题(3)——AAC的ADTS格式简介

一、引言 AAC&#xff08;Advanced Audio Coding&#xff09;有两种格式&#xff1a; 1.ADIF&#xff08;Audio Data Interchange Format&#xff0c;音频数据交换格式&#xff09;&#xff1a;整个流中只包含一个Header&#xff08;文件头&#xff09;&#xff0c;不能在任意…

TiDB 数据库核心原理与架构_Lesson 01 TiDB 数据库架构概述课程整理

作者&#xff1a; 尚雷5580 原文来源&#xff1a; https://tidb.net/blog/beeb9eaf 注&#xff1a;本文基于 TiDB 官网 董菲老师 《TiDB 数据库核心原理与架构&#xff08;101) 》系列教程之 《Lesson 01 TiDB 数据库架构概述》内容进行整理和补充。 课程链接&#xff1a;…