【每日一题】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))

🌏博客主页:PH_modest的博客主页

🚩当前专栏:每日一题

💌其他专栏:

🔴 每日反刍

🟡 C++跬步积累

🟢 C语言跬步积累

🌈座右铭:广积粮,缓称王!

一.题目描述

题目大意:

题目链接:

C. Challenging Cliffs(Codeforces Round 726 (Div. 2))

二.思路分析

  1. 首先将给的数排序
  2. 然后找相邻两数绝对值最小的两个数(将他们的下标记为l和r),这两个数肯定是放在头和尾,因为题目要求是第一个和最后一个山峰绝对值最小
  3. 之后就剩下l前面的数和r后面的数了,这两组数都是已经排好序的(将前面一组记为P,后一组记为Q),也就是说他们都是困难程度最大的情况
  4. 接下来就面临两种选择,先放P后放Q,先放Q后放P,大部分人都觉得先放P后放Q更好,真的是这样的吗?


    第二张图应该可以较为清楚的解释为什么这样较好,这里就不过多赘述了。

三.代码展示

cpp 复制代码
#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;
}

最后:

每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。
之后每个星期都会不定期更新codeforces和atcoder上的题目,想要学习算法的友友们千万别错过了,有什么疑问欢迎大家在评论区留言或者私信博主!
在这里送大家一句话:广积粮,缓称王!

相关推荐
可编程芯片开发5 分钟前
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
算法
怕浪猫24 分钟前
2840亿参数只卖白菜价:DeepSeek V4 Flash 正式版上线,Agent 能力暴涨6倍
人工智能·算法
让学习成为一种生活方式30 分钟前
苄基异喹啉生物碱糖基转移酶UGT74AN1晶体--Journal of Agricultural and Food Chemistry
人工智能·算法
早睡早起身体好12331 分钟前
为什么 Network 中会出现两个同名请求?——CORS 预检请求学习笔记
网络·笔记·学习·网络安全
菩提树下的打坐31 分钟前
测试左移的更深一层:用 DDD 战术设计反推测试边界
学习
alphaTao33 分钟前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode
易筋紫容1 小时前
创建型模式:对象的诞生艺术
开发语言·前端·javascript
888CC++1 小时前
C++ 快速学习指南:从入门到进阶的实战路线
开发语言·c++
2501_926978331 小时前
提示工程的实战报告(二):模型的失败模式与边界行为
人工智能·深度学习·算法
小小晓.1 小时前
C++记:函数
开发语言·c++·算法