题意:现有n个公交车站,给出每个公交车站上下车的人数变化,正为上车,负为下车,公交车的最大容量为w。问,最开始时,公交车的可能人数有多少种。如果任何人数都与后面给出的上下情况冲突的话,输出0.
直接看AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e6+5;
int a[maxn],sum[maxn];
int main(){
int n,w;
cin>>n>>w;
for(int i=1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
int minn=0x3f3f3f3f,maxn=0;
for(int i=1;i<=n;i++){
minn=min(minn,sum[i]);
maxn=max(maxn,sum[i]);
}
maxn=w-maxn;//车上能上这么多人意味着最开始我要有足够的空间,即最开始的人加上最多的时候的人不能超载
minn=minn>0?0:-minn;//车上最少可以是0,但是如果下车人数变成负的,那说明刚开始车上至少要有这些人
int ans=maxn-minn+1;
if(ans<0)cout<<0<<endl;
else cout<<ans<<endl;
}