Hills And Valleys

题意

修改数列中的 一个 数字 使得峰(波峰、波谷)的数量最少

思路

首先我们通过手写几个例子可以知道 修改一个数只能影响到左右两个数 所以能减少的峰的数量为 1、2、3 三种情况

其次 若将这个数修改成 两边两个数构成的范围之外 那么不会改变峰的数量 所以第 iii 个数的改变范围为 [ai−1,ai+1][a_{i-1},a_{i+1}][ai−1​,ai+1​] 可以贪心地将其改成左边的数计算出能减少多少个峰 再将其变成右边的数 计算出能减少多少个峰 结果取 maxmaxmax 即可

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 1000000007
#define endl '\n'
using namespace std;typedef  long long LL;
typedef pair<int, int>PII;
inline LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; }
const int N = 300010;int n;
int a[N];int check(int i) {if (i == 1 || i == n)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;
}void solve() {scanf("%d", &n);for (int i = 1; i <= n; ++i) {scanf("%d", &a[i]);}int cnt = 0;for (int i = 2; i <= n - 1; ++i) {if (check(i))cnt++;}int res = 0;for (int i = 2; i <= n - 1; ++i) {if (check(i) == 1) { //是峰int t1 = check(i - 1) + check(i) + check(i + 1);int inita = a[i];a[i] = a[i - 1];int res1 = check(i - 1) + check(i) + check(i + 1);a[i] = a[i + 1];int res2 = check(i - 1) + check(i) + check(i + 1);res = max(res, t1 - min(res1, res2));a[i] = inita;}}//cout << "cnt == " << cnt << endl;//cout << "res == " << res << endl;cout << cnt - res << endl;
}int main() {int t; cin >> t;while(t--)solve();return 0;
}

CodeForces - 1467B - Hills And Valleys (贪心)相关推荐

  1. Hills And Valleys CodeForces - 1467B

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

  2. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  3. Hills And Valleys CodeForces - 1467B 思维

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

  4. Codeforces 671E Organizing a Race (贪心、线段树)

    题目链接 https://codeforces.com/contest/671/problem/E 题解 完全不会做--基本是抄lk的代码 ruogu的题解: https://www.luogu.co ...

  5. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

  6. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  7. codeforces 416C C. Booking System(贪心)

    题目链接: codeforces 416C 题目大意: 给出n个请求,每个请求包括客人数量和支付金额,再给出m个桌子,包括桌子大小,问如何安排才能最大盈利.给出最大盈利和一个能够最大盈利的方案. 题目 ...

  8. Codeforces 540B School Marks 【贪心构造】

    题目链接:Codeforces 540B School Marks Little Vova studies programming in an elite school. Vova and his c ...

  9. CodeForces 508E Arthur and Brackets 贪心

    题目: E. Arthur and Brackets time limit per test 2 seconds memory limit per test 128 megabytes input s ...

  10. Codeforces 797C Minimal string【贪心】

    题意: 给出了字符串s的内容,字符串t,u初始默认为空,允许做两种操作: 1.把s字符串第一个字符转移到t字符串最后. 2.把t字符串最后一个字符转移到u字符串最后. 最后要求s.t字符串都为空,问u ...

最新文章

  1. centos mysql拒绝连接失败_CentOS下mysql远程连接的失败的解决方法
  2. python def main return,python中main()函数写法
  3. FPGA开发之RAM IP的使用
  4. 虚拟机克隆以后出现“需要整合虚拟机磁盘”的解决方法
  5. 乔布斯在斯坦福大学毕业典礼上的演讲
  6. 湖湘杯 | Misc Wp
  7. java原生的ajax怎么写_原生Ajax代码实现
  8. python深度优先_python数据结构之图深度优先和广度优先实例详解
  9. 用python语言模拟微信红包_python 模拟微信抢红包 基础语法实现demo
  10. 华为手机像素密度排行_最新手机性能排行榜出炉:高通骁龙865霸榜,前十不见华为!...
  11. 【leetcode-101】 对称二叉树
  12. ad17如何删除3d实体_3D打印的过程/流程
  13. 你可能知道“道哥”,但你一定不知道“道哥”...
  14. 算法(字符串)——重复的子字符串
  15. 深度学习——知识点总结3(损失函数Loss)
  16. 全网最细------爬取4k高清大图
  17. 数据库之区分DB\DBMS\DBS
  18. CFileDialog控件ID值
  19. 2021前端面试总结及反思
  20. 人工智能学习路线(转载)

热门文章

  1. 1052 Linked List Sorting (25 分)-PAT甲级
  2. dxdiag是什么 dxdiag命令怎么用
  3. 西南大学网络作业答案计算机,2019西南大学继续教育学院《计算机基础》作业答案...
  4. Unity3D Shader 新手教程(2/6) —— 积雪Shader
  5. C语言数组相似度比对,C语言实验报告:碱基相似度比较
  6. 2021年总结:厚积薄发,突破自我
  7. MySQL写Shell方法总结
  8. 从高考到程序员,一生无悔的选择,码农的成长之路
  9. kubernetes配置管理:cm,sercret,sa
  10. 简约好看的绚丽彩虹同学录V1.4源码