b1=a1+a2
b2=a2+a3
b3=a3+a4
...
可以得到:
a2=b1−a1
a3=b2−b1+a1
...
已知所有的bi,因此所有ai的可能其实就是取决于a1可以取的值的个数
根据所有的ai>0可以不断地去计算a1取值的上界和下界,然后一边读取bi,一边更新上下界即可
C++
#include <algorithm>
#include <climits>
#include <iostream>
using namespace std;
int main()
{
    int n = 0;
    cin >> n;
    long long upper = LONG_MAX, lower = 0;
    long long bSum = 0;
    for (int i = 1; i < n; ++i)
    {
        int bi = 0;
        cin >> bi;
        if (i & 1)
        {
            bSum += bi;
            upper = min(upper, bSum);
        }
        else
        {
            bSum -= bi;
            lower = max(lower, bSum);
        }
    }
    // 如果lower >= upper - 1, 输出0.
    long long answer = max(0ll, upper - lower - 1);
    cout << answer << endl;
    return 0;
}
Java
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        long upper = Long.MAX_VALUE, lower = 0;
        long bSum = 0;
        for (int i = 1; i < n; ++i) {
            int bi = scanner.nextInt();
            if ((i & 1) == 1) {
                bSum += bi;
                upper = Math.min(upper, bSum);
            } else {
                bSum -= bi;
                lower = Math.max(lower, bSum);
            }
        }
        // 如果lower >= upper - 1, 输出0.
        long answer = Math.max(0, upper - lower - 1);
        System.out.println(answer);
    }
}
Python
n = int(input())
upper = float('inf')
lower = 0
bSum = 0
for i in range(1, n):
    bi = int(input())
    if i % 2 == 1:
        bSum += bi
        upper = min(upper, bSum)
    else:
        bSum -= bi
        lower = max(lower, bSum)
# 如果lower >= upper - 1, 输出0.
answer = max(0, upper - lower - 1)
print(answer)
        在音乐创作过程中,有一种常见的技巧叫做“和声”。和声是指通过组合多个音符的声音来产生更加丰富的音乐效果。在和声中,相邻的音符通常被组合成和弦,而和弦的构成方式与音符的间隔密切相关。
假设在一首音乐作品中,有一段旋律由 n 个音符组成,每个音符的音高由一个正整数表示。作曲家希望为这段旋律添加一些和声,以产生更加丰富的音乐效果。为了实现这个目标,他们想要找到一组和弦,使得这组和弦的构成方式与旋律的音符间隔完全匹配。
为了帮助作曲家实现这个目标,你需要编写一个程序来计算出可能的音符数组 a 的组合方式数目。给定一个长度为 n−1 的和弦数组 b,你的任务是计算出可能的音符数组 a 的组合方式数目。其中,和弦数组 b 中的每个元素 b[i]=a[i]+a[i+1] 。
作曲家们知道,在音乐中,和弦的构成方式是非常丰富多样的。因此,他们希望通过这个程序来快速地计算出所有可能的音符数组 a 的组合方式数目,以便在创作过程中进行参考。
第一行输出为一个整数 n(1≤n≤1e5) 。
第二行输出为 n−1 个整数,第 i 个整数为 bi(1≤bi≤1e9) 。
输出为一个整数,表示数组 a 有多少种可能。
输入
3
2 2
输出
1
样例解释
可以构造序列:a={1,1,1}
输入
3
2 1
输出
0
样例解释
注意a,b 之间的关系以及a必须为正整数
输入
4
12 34 236
输出
11