思路分析
我们只需要找到左边第一个大于 \(0\) 的位置 \(l\) 与右边第一个大于 \(0\) 的位置 \(r\),输出 \(r-l+1\) 即可。
但是很坑的一点是,如果 \(∀i∈[1,n],a_i=0\),那么 \(l\) 和 \(r\) 会重合,代码会输出 \(1\)!所以,我们需要定义一个 \(flag\) 来标记是否全部输入为 \(0\)。
代码实现
#include <bits/stdc++.h>
using namespace std;
int n, l, r;
bool flag = true;
int main() {
cin >> n;
vector<int> a(n);
for (auto &x : a) {
cin >> x;
if (x != 0) flag = false; // 如果非0那么就不需要特判了
}
if (flag) { // 如果全部为0,那么就输出0
cout << 0;
return 0;
}
for (l = 0; l < n; l++)
if (a[l] >= 1) break; // 从左端开始找到第一个大于0的位置
for (r = n - 1; r >= 0; r--)
if (a[r] >= 1) break; // 从左端开始找到第一个大于0的位置
cout << r - l + 1; // 一定要加1,否则就把l也去掉了
return 0;
}
标签:P9517,int,题解,cin,flag,大于,左端
From: https://www.cnblogs.com/IShallReturn/p/P9517-ti-jie.html