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
惨痛教训:


浙公网安备 33010602011771号