专栏文章

题解:CF2108C Neo's Escape

CF2108C题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@mip75bey
此快照首次捕获于
2025/12/03 07:15
3 个月前
此快照最后确认于
2025/12/03 07:15
3 个月前
查看原文

思路:

如果一个克隆体所在的按钮的权重比两边的按钮的权重要高,就这个克隆体去按下两边的按钮即可。因此,此题可以被转化为:求数组中有多少个元素的值比前一个元素和后一个元素的值要大。这就很好解决了。
同时,我们先要对数组进行去重处理。
这样我们的解题步骤就很明确了
  1. 对数组进行去重存入一个新数组。
  2. 遍历新数组,如果当前元素比前一个和后一个元素都要大则累加器加一。

代码:

CPP
#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 记录:

感谢观看。

评论

2 条评论,欢迎与作者交流。

正在加载评论...