题解:CF2108C Neo's Escape
思路:
如果一个克隆体所在的按钮的权重比两边的按钮的权重要高,就这个克隆体去按下两边的按钮即可。因此,此题可以被转化为:求数组中有多少个元素的值比前一个元素和后一个元素的值要大。这就很好解决了。
同时,我们先要对数组进行去重处理。
这样我们的解题步骤就很明确了
-
对数组进行去重存入一个新数组。
-
遍历新数组,如果当前元素比前一个和后一个元素都要大则累加器加一。
代码:
#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 记录:
感谢观看。