【每日一题】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))
🌏博客主页:PH_modest的博客主页
🚩当前专栏:每日一题
💌其他专栏:
🔴 每日反刍
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!
一.题目描述
题目大意:
题目链接:
C. Challenging Cliffs(Codeforces Round 726 (Div. 2))
二.思路分析
- 首先将给的数排序
- 然后找相邻两数绝对值最小的两个数(将他们的下标记为l和r),这两个数肯定是放在头和尾,因为题目要求是第一个和最后一个山峰绝对值最小
- 之后就剩下l前面的数和r后面的数了,这两组数都是已经排好序的(将前面一组记为P,后一组记为Q),也就是说他们都是困难程度最大的情况
- 接下来就面临两种选择,先放P后放Q,先放Q后放P,大部分人都觉得先放P后放Q更好,真的是这样的吗?
第二张图应该可以较为清楚的解释为什么这样较好,这里就不过多赘述了。
三.代码展示
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>#define int long longusing namespace std;int s[200020];void solve()
{int n;cin>>n;for(int i=0;i<n;i++){cin>>s[i];}sort(s,s+n);int l=0,r=l+1;int mins=1e9;for(int i=0;i<n-1;i++){if(s[i+1]-s[i]<mins){mins=s[i+1]-s[i];l=i;r=i+1;}}cout<<s[l]<<" ";for(int i=r+1;i<n;i++){cout<<s[i]<<" ";}for(int i=0;i<l;i++){cout<<s[i]<<" ";}cout<<s[r]<<"\n";
}signed main()
{int t;cin>>t;while(t--){solve();}return 0;
}
最后:
每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。
之后每个星期都会不定期更新codeforces和atcoder上的题目,想要学习算法的友友们千万别错过了,有什么疑问欢迎大家在评论区留言或者私信博主!
在这里送大家一句话:广积粮,缓称王!