题解:CF2108C Neo's Escape

· · 题解

思路:

如果一个克隆体所在的按钮的权重比两边的按钮的权重要高,就这个克隆体去按下两边的按钮即可。因此,此题可以被转化为:求数组中有多少个元素的值比前一个元素和后一个元素的值要大。这就很好解决了。

同时,我们先要对数组进行去重处理。

这样我们的解题步骤就很明确了

  1. 对数组进行去重存入一个新数组。

  2. 遍历新数组,如果当前元素比前一个和后一个元素都要大则累加器加一。

代码:

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

const int N = 2e5;
int T, n, cnt, ans;
int a[N + 5], b[N + 5];

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);//关闭同步,去掉不影响程序正常运行
    cin >> T;
    while(T--){
        cin >> n;
        cnt = ans = 0;
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));//清空
        for(int i = 1;i <= n;i++){
            cin >> a[i];
            if(a[i] == a[i - 1]) continue;
            else{
                b[++cnt] = a[i];
            }
        }//去重
        for(int i = 1;i <= cnt;i++){
            if(b[i] > b[i - 1] && b[i] > b[i + 1]){
                ans++;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}

AC 记录:

感谢观看。