codeoforces 1467 B Hills And Valleys (枚举)

news/2024/5/18 23:52:30 标签: 枚举

题面

在这里插入图片描述

题意

在这里插入图片描述

题解

  1. 一开始想的是分情况讨论,比如当修改一个值后会影响几个波峰波谷的变化,又会增加几个新的波峰波谷,其实不用
  2. 因为只能改变一个值,所以我们直接枚举改变的值,改变后最优的值肯定是和左右端点相等的,对于枚举的每个点,我们只需要判断一下等于左端点减少的峰谷多还是等于右端点峰谷减少的多就可以了

代码

#include<bits/stdc++.h>

using namespace std;
const int N = 1e6 + 10;

int t, n;
int a[N];

int check(int index) {
    if (index == 1 || index == n) return 0;
    if (a[index] > a[index + 1] && a[index] > a[index - 1]) return 1;
    if (a[index] < a[index + 1] && a[index] < a[index - 1]) return 1;
    return 0;
}

int main() {

    cin >> t;
    while (t--) {
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> a[i];
        if (n == 1 || n == 2) {
            cout << 0 << endl;
        } else {
            int res = 0;
            for (int i = 2; i < n; i++) {
                if (a[i] < a[i + 1] && a[i] < a[i - 1]) {
                    res++;
                } else if (a[i] > a[i + 1] && a[i] > a[i - 1]) {
                    res++;
                }
            }
            int manx = 1;
            for (int i = 2; i < n; i++) {
                int temp = a[i];
                int cnt = check(i - 1) + check(i) + check(i + 1);
                a[i] = a[i - 1];
                int cnt1 = check(i - 1) + check(i) + check(i + 1);
                a[i] = a[i + 1];
                int cnt2 = check(i - 1) + check(i) + check(i + 1);
                a[i] = temp;
                int change = max(cnt - cnt1, cnt - cnt2);
                manx = max(manx, change);
            }
            cout << max(0, res - manx) << endl;
        }
    }

    return 0;
}


http://www.niftyadmin.cn/n/1572310.html

相关文章

HTML中制作多级菜单的js,基于JavaScript实现多级菜单效果

本文实例为大家分享了js实现多级菜单效果展示的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下具体代码如下&#xff1a;Document*{margin:0;padding:0;font-size:14px;}ul,li{list-style:none;}.box{margin:10px;padding:10px;width:300px;border:1px dashed #00800…

算法竞赛进阶指南---0x18(树的最小表示)树形地铁系统

题面 题解 1.题意就是问给定的字符串对应的树是否是同构的&#xff0c;我们先来说一下概念 2. 对于树的遍历&#xff0c;从根节点开始0代表向下遍历&#xff0c;1代表向上回溯, 我们遍历树就会得到dfs序,也可以根据dfs序画出树&#xff0c;两颗拓扑序相同的树&#xff0c;我们就…

台式计算机设备序列号,如何检查我的计算机型号和序列号

写一个答案...您提交的内容包含以下非法字符&#xff0c;请仔细检查&#xff01;接受笔记本的型号和序列号通常在笔记本的后面台式机侧面在台式机上以ThinkPad笔记本为例:当然&#xff0c;某些笔记本电脑的序列号会在电池仓中&#xff0c;您需要卸下电池这是序列号使用z武器检查…

codeforces 1023 D Array Restoration (树状数组)

题面 题意 有一个长度为n的序列&#xff0c;你可以进行 q 次修改&#xff0c;第i次修改将区间 [l,r] 的数修改成 i &#xff0c;涉及的 q次修改必须要覆盖区间中的每个数&#xff0c;q 次修改之后&#xff0c;将这个序列中的某些数变为0&#xff0c;得到一个新的序列&#xff0…

html文件vbs病毒,又一个VBS病毒源码的解密

在解密暴风一号病毒的时候&#xff0c;曾经搜索到看雪的一个帖子&#xff0c;楼主说的也是暴风一号的解密。但是下面有人回了一个对于病毒来说这个代码写得很啰嗦&#xff0c;没什么功能&#xff0c;连后台都没有&#xff0c;发布出去就是个死马该让别人看不懂的地方一点也没有…

win7 怎么设置自动锁定计算机,win7系统怎么设置密码联系输入3次错误就自动锁定电脑...

许多win7系统用户都喜欢给电脑设置开机密码&#xff0c;保护电脑安全&#xff0c;但是有时候他人在没有经过你的同意&#xff0c;通过不断的密码猜测进入你的电脑&#xff0c;这样很危险&#xff0c;那么其实我们可以设置密码联系输入3次错误就自动锁定电脑&#xff0c;该怎么操…

算法竞赛进阶指南---0x18(KMP)Milking Grid

题面 题解 对于求一个最小覆盖矩阵&#xff0c;我们可以横纵分开来求&#xff0c;先看横向&#xff0c;对于每行&#xff0c;我们直接暴力枚举循环节长度&#xff0c;判断每一行是否符合,最后得到一个横向的最小循环节长度&#xff08;width&#xff09; 对于纵向&#xff0c;我…

如何使用计算机自带的刻录软件,Win10电脑如何刻录光盘?利用win10自带刻录工具来刻录DVD光盘教程...

虽然光盘已经在家用电脑中基本淘汰&#xff0c;但是在一些特定行业中&#xff0c;例如影楼&#xff0c;还是会以光盘的形式将照片给消费者&#xff0c;或者摄影爱好者也喜欢将拍摄的图片或者影像刻录到光盘中保存。那么Win10电脑如何刻录光盘&#xff1f;下面装机之家教您利用w…