AtCoder [ABC339C] Perfect Bus 题解

题面

分析

题目要求我们求当前可能的最小的乘客人数

可以发现,要使现在的乘客人数最小,初始的乘客人数也必须是可能的最小的状态

我们将乘客变化的信息存储在 \(a\) 数组里,那么我们可以用 \(sum\) 数组对 \(a\) 数组求前缀和,\(sum_i\) 表示在第 \(i\) 个时间点上相对于初始乘客数量所变化的数量

我们求出 \(sum\) 数组的最小值,根据题面可以得知乘客人数始终大于等于 0,所以必须保证乘客数量最少时也大于等于 0,乘客数量最少时的数量即为初始乘客数量加上 \(sum\) 数组的最小值。

  • 当最小值小于 0 时,初始乘客数量最小为最小值的相反数。
  • 当最小值大于等于 0 时,初始乘客数量最小为 0

当前乘客数量即为初始乘客数量加上 \(sum_n\)

不开 long long 见祖宗。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
long long n,a[N],minn=LONG_LONG_MAX,sum[N];
int main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		sum[i]=sum[i-1]+a[i];
		minn=min(sum[i],minn);
	}
	if(minn<0)printf("%lld",sum[n]-minn);
	else printf("%lld",sum[n]);
	return 0;
}
posted @ 2025-08-18 19:06  cqbzcjh  阅读(3)  评论(0)    收藏  举报