Codeforces Round 481 (Div. 3) E. Bus Video System 题解

题意:有一辆最大载客容量为w的公交车。给出一个数组a,表示在i站下车或上车多少人。考虑在进站前车上有多少人在公共汽车上的可能方法数。即最多可能有多少人数+1;
思路:考虑用一个前缀和st动态的去维护上下界。上界r是在有人出站前时,w - 人数的最大值。下界l则是有人出站时,0 + 出站人数的最大值;
r = min(r, w - st); l = max(l, 0 - st);

AC代码:

点击查看代码
#include <bits/stdc++.h>
#define int long long
#define ui64 unsigned long long
#define pll pair<int, int>
using namespace std;

void solve(){
	int n, w;
	cin >> n >> w;
	vector <int> a(n + 1);
	
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	
	int r = w, l = 0, st = 0;
	for(int i = 0; i < n; i++){
		if(a[i] > 0) {
			st += a[i];
		}else if(a[i] < 0){
			r = min(r, w - st);
			st += a[i];
			l = max(l, 0 - st);
		}
	}
	r = min(r, w - st);
	l = max(l, 0 - st);
	if(r < l) cout << 0 << endl;
	else cout << abs(r - l + 1) << endl;

}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    solve();
    return 0;
}

注意:如果情况是矛盾的,即l > r时,根据题意需要输出0,否则会wa
惨痛教训:
屏幕截图 2025-10-12 174237

posted @ 2025-10-17 17:23  扶风zer0  阅读(3)  评论(0)    收藏  举报