Hills And Valleys(贪心/枚举)
题目
参考
题意:给定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(贪心/枚举)相关推荐
- Hills And Valleys CodeForces - 1467B
Hills And Valleys CodeForces - 1467B 题意: 修改数列中的 一个 数字 使得峰(波峰.波谷)的数量最少 题解: 修改一个数,最多只能影响左右两个数,所能减少的峰的数 ...
- CodeForces - 803C Maximal GCD(贪心 + 枚举)
链接一 链接二 You are given positive integer number n. You should create such strictly increasing sequence ...
- D. Boboniu Chats with Du (664 div2 贪心 枚举)
D. Boboniu Chats with Du 题意: 给 n 个快乐值,你可以按任何顺序在群里说出快乐值为 kik_iki 的话,当 m<kim<k_im<ki 时,你会获得 ...
- UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】
题目链接 题意 给n个互不相包含的区间,求出一个长度的最大值,使得可以在每个区间中选出这样一个长度的子区间,这些子区间互不相交.结果用分数表示 分析 先考虑如果给定了区间长度能不能选出这样的区间.因为 ...
- Codeforces 1395 D. Boboniu Chats with Du(贪心枚举答案)
传送门 题意: 思路: 先把大于m的放在b数组,小于m的放在a数组 枚举一下最终结果中用了几个b,取一个最大值即可 看代码应该能明白(有注释) 代码: int a[MAXN],b[MAXN]; ll ...
- Hills And Valleys CodeForces - 1467B 思维
给你一个数组,最多可以修改一个数,问最少的山峰和山谷数量之和. 小菜鸡做了一年. 一上来想猜个结论,让每个数等于其相邻的两个数,看了题解之后也证明的正确性,当时直接写就没后面这么多事了. 但是命运让我 ...
- UVALive - 4850 Installations 贪心+枚举
题目大意:工程师要安装n个任务,其中第i个服务Ji需要si单位的安装时间,截止时间为di,如果在截止时间之前完成任务,不会有任何惩罚,否则惩罚值为任务完成时间与截止时间之差,你的任务是让惩罚值最大的两 ...
- P2102 地砖铺设(dfs贪心)
P2102 地砖铺设(dfs&贪心) 枚举每个点作为正方形左上角进行扩展,只需对左边界和上边界进行判断即可,然后正方形填充.因为要求最小,所以每次就特判右上角的点是否能更小,如果不行就brea ...
- Making the Grade POJ - 3666(离散化+dp)
题意: 给你n个山的高度,单独的一个数可以任意加减,让经过对每座山峰任意加减高度后变成递增或递减的序列时,求对每个数的相加或相减的数目的最小和. 题目: A straight dirt road co ...
- Codeforces Round #695 (Div. 2)ABCD题解详析
A. Wizard of Orz 首先保证第一块板子是999,那么第二块板子不可能是999,那么令第二块板子为888 只要在第二块板到达888的时候按下暂停,那么第一块是999,第三块板子也是999 ...
最新文章
- ICCV 2021 Oral | PoinTr:几何敏感的多样点云补全Transformer
- review_core_basic_java(1)java程序设计概述
- matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
- nginx -- 安装配置Nginx
- java enum枚举类型的使用
- 蓝桥杯 ADV-13 算法提高 最小乘积(提高型)
- logstash过滤器插件filter详解及实例
- 15crmo焊接后多长时间探伤_焊工必看:掌握钢结构焊接最重要的10个知识,不愁拿不到高工资!...
- 教师管理系统java_基于jsp的教师管理系统-JavaEE实现教师管理系统 - java项目源码...
- 宝塔搭建javaweb_宝塔面板配置及部署javaweb教程(全网最全)
- 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全 原神风物之诗琴谱乐谱弹奏攻略...
- ps 自动生成html代码,详解使用PS中直接生成html网页保存样式的步骤
- [WebSocket]使用WebSocket实现实时多人答题对战游戏
- eos 测试网搭建,单节点,并使用命令行完成系统合约部署、账户创建、资产转账
- 人工智能学习:python实现迭代加深的深度优先搜索
- 学习社会工程学需要什么前置知识
- ijk播放器缓冲机制
- ArcGIS Pro制图-河流曲线图例
- HTML5菜鸟入门指导:简介、平台搭建、示例演示
- 分析型项目的模型管理建议(建议收藏)
热门文章
- 解决stm32下载错误 “Could not stop Cortex-M device.Please check the JTAG cable.“
- SQL中的交叉连接-cross join
- selenium自动化从0开始学习
- 用javascript实现九九乘法口诀表
- C++ 使用 OpenCV 实现证件照蓝底换成白底功能(或其他颜色如红色)详解
- 特征变换:特征归一化(Normalization)作用以及方法 Min-Max、Z-Score
- gitlab服务: kex_exchange_identification: Connection closed by remote host
- Jitsi的公网部署与SSL证书手动安装
- win7 删除网络计算机,win7系统修改和删除网络图标的方法
- python ar_四种AR的实现方式