P9517 题解

· · 题解

题意化简:给出一个数列 \{a_n\},求从第一个等于 1a_l 到最后一个等于 1a_r 之间共有几个数 (包括 a_la_r)。

那么可以很快可以得出结论:[a_l, a_r] 间共有 r - l + 1 个数。

特判:如果数列中每个数都为 0,那么此时答案为 0

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 9;

int n, a[N], l, r;
bool f;

int main() {
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        if (a[i]) f = 1;
    }
    if (!f) {
        cout << 0;
        return 0;
    }
    for (int i = 1; i <= n; ++i) {
        if (a[i]) {
            l = i;
            break;
        }
    }
    for (int i = n; i; --i) {
        if (a[i]) {
            r = i;
            break;
        }
    }
    cout << r - l + 1;
    return 0;
}