??博客主頁:PH_modest的博客主頁
??當(dāng)前專欄:每日一題
??其他專欄:
?? 每日反芻
?? C++跬步積累
?? C語言跬步積累
??座右銘:廣積糧,緩稱王!
一.題目描述
題目大意:
題目鏈接:
C. Challenging Cliffs(Codeforces Round 726 (Div. 2))
二.思路分析
- 首先將給的數(shù)排序
- 然后找相鄰兩數(shù)絕對值最小的兩個數(shù)(將他們的下標(biāo)記為l和r),這兩個數(shù)肯定是放在頭和尾,因為題目要求是第一個和最后一個山峰絕對值最小
- 之后就剩下l前面的數(shù)和r后面的數(shù)了,這兩組數(shù)都是已經(jīng)排好序的(將前面一組記為P,后一組記為Q),也就是說他們都是困難程度最大的情況
- 接下來就面臨兩種選擇,先放P后放Q,先放Q后放P,大部分人都覺得先放P后放Q更好,真的是這樣的嗎?
第二張圖應(yīng)該可以較為清楚的解釋為什么這樣較好,這里就不過多贅述了。
三.代碼展示
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>
#define int long long
using 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;
}
最后:
每日一題系列旨在養(yǎng)成刷題的習(xí)慣,所以對代碼的解釋并不會特別詳細(xì),但足夠引導(dǎo)大家寫出來,選的題目都不會特別難,但也不是特別簡單,比較考驗大家的基礎(chǔ)和應(yīng)用能力,我希望能夠?qū)⑦@個系列一直寫下去,也希望大家能夠和我一起堅持每天寫代碼。
之后每個星期都會不定期更新codeforces和atcoder上的題目,想要學(xué)習(xí)算法的友友們千萬別錯過了,有什么疑問歡迎大家在評論區(qū)留言或者私信博主!文章來源:http://www.zghlxwxcb.cn/news/detail-630786.html
在這里送大家一句話:廣積糧,緩稱王!文章來源地址http://www.zghlxwxcb.cn/news/detail-630786.html
到了這里,關(guān)于【每日一題】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!