题解:P10205 [JOI 2024 Final] 室温
P10205 [JOI 2024 Final] 室温 题解
题面传送门
题意概括
题目让我们求的是,对于一个内部任意某些元素可以减少正定值的数组
题目分析
由于每一位高管的舒适温度可以通过穿外套的方式减少,我们不妨对他们进行统一:让每位高管的舒适温度都处于
接下来,我们要考虑把室温
这时候肯定就有人要问了,为什么要算这么一个最大值呢?我们可以这样理解:如果我们要调整室温使房间的不舒适度最小,那我们肯定是去成全两个相邻舒适温度相差最大的,这样才能降低最大的
那么,上述的效果如何实现呢?我们假设已经找到两个相差最大的舒适温度,分别为
最后,我们只需要把室温调到
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[500002],t,maxd,k;//变量名如题意
int main()
{
scanf("%d%d",&n,&t);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]%=t;//边输入边取模
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
maxd=max(maxd,a[i+1]-a[i]);
maxd=max(maxd,a[1]+t-a[n]);//如题目分析,这里千万不能漏
k=ceil((double(t-maxd))/2.0);//向上取整的函数,如果它本来就是整数就不变
printf("%d",k);
return 0;
}
记得,顶一下!