0
点赞
收藏
分享

微信扫一扫

树上有猴(模拟)

您好 2022-02-08 阅读 91

一棵大树上初始时有若干个猴子(也可能没有)。

接下来 nn 个时刻,每个时刻树上猴子的数量都会发生变动。

第 ii 时刻的变动数量为 ai,ai>0 表示有 ai 只猴子上了树,ai<0 表示有 |ai| 只猴子下了树。

已知,在任意时刻树上的猴子总数都没有超过 w,当然也不可能小于 0。

请问,初始时的猴子数量共有多少种可能性?

例如,当 n=3,w=5且 a1=2,a2=1,a3=−3时,初始时的猴子数量可能为 0,1,2个。

输入格式

第一行包含两个整数 n,w。

第二行包含 n 个整数 a1,a2,…,an。

输出格式

一个整数,表示初始时的猴子数量共有多少种可能性。

如果无解,即初始时有多少只猴子都不满足题目要求,则输出 0。

输入样例1:
3 5
2 1 -3
输出样例1:
3
输入样例2:
2 4
-1 1
输出样例2:
4
输入样例3:
4 10
2 4 1 2
输出样例3:
2

方案:c++

#include <bits/stdc++.h>
using namespace std;
using ll = long long; 

int main() {
    ll n, w;
    cin >> n >> w;
    // 由于初始时刻数量为 0,也应被统计到最值中
    // cur 记录当前时刻猴子的总数量
    ll maxcnt = 0, mincnt = 0, cur = 0;

    for(int i = 0; i < n; ++i) {
        // 读入当前时刻猴子变化量
        ll x;
        cin >> x;
        // 加入到结果中,并取最值
        cur += x;
        maxcnt = max(maxcnt, cur);
        mincnt = min(mincnt, cur);
    }
    printf("%lld\n", max((ll)0, w - (maxcnt - mincnt) + 1));
    return 0;
}

欢迎留言点赞

举报

相关推荐

0 条评论