题目
参考
题意:给定n个数,要求改动一个数(可以改成任意数),使得改动后这n个数的hill数和valley数的和最小。
hill:如果ai>ai−1&&ai>ai+1a_i>a_{i-1}\&\&a_i>a_{i+1}ai​>ai−1​&&ai​>ai+1​,则aia_iai​为hill
valley:如果ai<ai−1&&ai<ai+1a_i<a_{i-1}\&\&a_i<a_{i+1}ai​<ai−1​&&ai​<ai+1​,则aia_iai​为valley
题解:改动数时,改为ai−1a_{i-1}ai−1​或ai+1a_{i+1}ai+1​为最优。枚举改动的所有情况,取最优。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 300010;int n;
int a[maxn];int check(int i) {if (i == 0 || i == n - 1) return 0;if (a[i] > a[i-1] && a[i] > a[i+1])return 1;if (a[i] < a[i-1] && a[i] < a[i+1])return 1;return 0;
}int cal(int i) {return check(i-1) + check(i) + check(i+1);
}int main() {int t;scanf("%d", &t);while (t--) {scanf("%d", &n);for (int i = 0; i < n; ++i) {scanf("%d", &a[i]);}int num = 0;for (int i = 1; i < n - 1; ++i) {num += check(i);}int mx = 0;for (int i = 1; i < n - 1; ++i) {int tmp = a[i];int res = cal(i);a[i] = a[i-1];int mn = cal(i);a[i] = a[i+1];mn = min(mn, cal(i));mx = max(mx, res - mn);a[i] = tmp;}
//      printf("num:%d mx:%d\n", num, mx);printf("%d\n", num - mx);}
}

Hills And Valleys(贪心/枚举)相关推荐

  1. Hills And Valleys CodeForces - 1467B

    Hills And Valleys CodeForces - 1467B 题意: 修改数列中的 一个 数字 使得峰(波峰.波谷)的数量最少 题解: 修改一个数,最多只能影响左右两个数,所能减少的峰的数 ...

  2. CodeForces - 803C Maximal GCD(贪心 + 枚举)

    链接一 链接二 You are given positive integer number n. You should create such strictly increasing sequence ...

  3. D. Boboniu Chats with Du (664 div2 贪心 枚举)

    D. Boboniu Chats with Du 题意: 给 n 个快乐值,你可以按任何顺序在群里说出快乐值为 kik_iki​ 的话,当 m<kim<k_im<ki​ 时,你会获得 ...

  4. UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】

    题目链接 题意 给n个互不相包含的区间,求出一个长度的最大值,使得可以在每个区间中选出这样一个长度的子区间,这些子区间互不相交.结果用分数表示 分析 先考虑如果给定了区间长度能不能选出这样的区间.因为 ...

  5. Codeforces 1395 D. Boboniu Chats with Du(贪心枚举答案)

    传送门 题意: 思路: 先把大于m的放在b数组,小于m的放在a数组 枚举一下最终结果中用了几个b,取一个最大值即可 看代码应该能明白(有注释) 代码: int a[MAXN],b[MAXN]; ll ...

  6. Hills And Valleys CodeForces - 1467B 思维

    给你一个数组,最多可以修改一个数,问最少的山峰和山谷数量之和. 小菜鸡做了一年. 一上来想猜个结论,让每个数等于其相邻的两个数,看了题解之后也证明的正确性,当时直接写就没后面这么多事了. 但是命运让我 ...

  7. UVALive - 4850 Installations 贪心+枚举

    题目大意:工程师要安装n个任务,其中第i个服务Ji需要si单位的安装时间,截止时间为di,如果在截止时间之前完成任务,不会有任何惩罚,否则惩罚值为任务完成时间与截止时间之差,你的任务是让惩罚值最大的两 ...

  8. P2102 地砖铺设(dfs贪心)

    P2102 地砖铺设(dfs&贪心) 枚举每个点作为正方形左上角进行扩展,只需对左边界和上边界进行判断即可,然后正方形填充.因为要求最小,所以每次就特判右上角的点是否能更小,如果不行就brea ...

  9. Making the Grade POJ - 3666(离散化+dp)

    题意: 给你n个山的高度,单独的一个数可以任意加减,让经过对每座山峰任意加减高度后变成递增或递减的序列时,求对每个数的相加或相减的数目的最小和. 题目: A straight dirt road co ...

  10. Codeforces Round #695 (Div. 2)ABCD题解详析

    A. Wizard of Orz 首先保证第一块板子是999,那么第二块板子不可能是999,那么令第二块板子为888 只要在第二块板到达888的时候按下暂停,那么第一块是999,第三块板子也是999 ...

最新文章

  1. ICCV 2021 Oral | PoinTr:几何敏感的多样点云补全Transformer
  2. review_core_basic_java(1)java程序设计概述
  3. matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
  4. nginx -- 安装配置Nginx
  5. java enum枚举类型的使用
  6. 蓝桥杯 ADV-13 算法提高 最小乘积(提高型)
  7. logstash过滤器插件filter详解及实例
  8. 15crmo焊接后多长时间探伤_焊工必看:掌握钢结构焊接最重要的10个知识,不愁拿不到高工资!...
  9. 教师管理系统java_基于jsp的教师管理系统-JavaEE实现教师管理系统 - java项目源码...
  10. 宝塔搭建javaweb_宝塔面板配置及部署javaweb教程(全网最全)
  11. 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全 原神风物之诗琴谱乐谱弹奏攻略...
  12. ps 自动生成html代码,详解使用PS中直接生成html网页保存样式的步骤
  13. [WebSocket]使用WebSocket实现实时多人答题对战游戏
  14. eos 测试网搭建,单节点,并使用命令行完成系统合约部署、账户创建、资产转账
  15. 人工智能学习:python实现迭代加深的深度优先搜索
  16. 学习社会工程学需要什么前置知识
  17. ijk播放器缓冲机制
  18. ArcGIS Pro制图-河流曲线图例
  19. HTML5菜鸟入门指导:简介、平台搭建、示例演示
  20. 分析型项目的模型管理建议(建议收藏)

热门文章

  1. 解决stm32下载错误 “Could not stop Cortex-M device.Please check the JTAG cable.“
  2. SQL中的交叉连接-cross join
  3. selenium自动化从0开始学习
  4. 用javascript实现九九乘法口诀表
  5. C++ 使用 OpenCV 实现证件照蓝底换成白底功能(或其他颜色如红色)详解
  6. 特征变换:特征归一化(Normalization)作用以及方法 Min-Max、Z-Score
  7. gitlab服务: kex_exchange_identification: Connection closed by remote host
  8. Jitsi的公网部署与SSL证书手动安装
  9. win7 删除网络计算机,win7系统修改和删除网络图标的方法
  10. python ar_四种AR的实现方式