题解:P16751 [GKS 2020 #B] Bike Tour

· · 题解

题目传送门喵。

题目给了你 T 组数据,对于每组数据,第一行输入一个整数 N 表示 N 个检查点,第二行输入 N 个整数表示每个检查点的高度 H_i

由于题目说了,被称为山峰的点一定不是位于第 1 个和第 N 个的点,所以我们可以直接遍历 [2,N-1],对于每个 H_i,按照题目给出的判断条件判断即可。

代码如下:

#include <bits/stdc++.h>
#define vc(i, j, k) for (int i = j; i <= k; i++)

const int N = 105;
int a[N]; // 高度

void solve() {
    int n; std::cin >> n; // 检查点的个数
    vc(i, 1, n) std::cin >> a[i]; // 输入每个检查点的高度
    int count = 0; // 统计山峰个数
    vc(i, 2, n - 1) /*不是第一个和最后一个,直接循环[2, n-1]*/ if (a[i] > a[i - 1] && a[i] > a[i + 1]) { // 题目的判断条件
        count++; // 满足条件的话山峰个数+1
    }
    std::cout << count << '\n';
}

int main() {
    int t; std::cin >> t; // 输入测试用例的个数
    vc(_, 1, t) {
        printf("Case #%d: ", _); // 输出 Case #x
        solve();
    }
}