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;
}

浙公网安备 33010602011771号