题目
题目大意
一辆公交车上最多能乘 w w ( )个人,公交车发车后会依次在 n n ()个站停车,车上的一个系统会记录每次停站前后车上人数的差,现在给你这些差值,问公交车发车时车上可能有多少人,输出方案数。
分析
数学大法好,数学大法好,数学大法好。
设公交车在站台
i
i
停站后(即该下车的人已经下完车后)有个人,发车时有
S0
S
0
个人,所以
0≤S0,S1,...,Sn≤w
0
≤
S
0
,
S
1
,
.
.
.
,
S
n
≤
w
,题目给出公交车停在站台
i
i
前后的人数差,则:
相邻两个相加:
记录一下前缀和 Sumi S u m i ,则:
解这一串不等式得到 S0 S 0 的上下界,合并一下解集,判断 −1 − 1 ,输出,记得用
long long
。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int N;
long long Less,Greater,Sum,W;
int main(){
scanf("%d%I64d",&N,&W);
Less=W;//注意这里
for(int i=1;i<=N;i++){
int A;
scanf("%d",&A);
Sum+=A;
Less=min(Less,W-Sum);
Greater=max(Greater,-Sum);
}
int Ans=Less-Greater+1;
if(Ans<0) puts("0");
else printf("%d",Ans);
}