T1 酸碱度中和
https://gxyzoj.com/d/hzoj/p/3731
因为是要将一些数变为一个值,所以差相对小的一些数修改的会更少,所以可以先将原数组排序
因为当x可以时,x+1必然可以,所以考虑二分
接下来考虑到因为上下变动的都至多为m,所以开头和结尾的差必然不超过2m
它就可以看作用一些长度为2m的版进行覆盖,问最少要多少块
显然,从1开始,然后在终点后的第一个点继续,暴力枚举即可
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,k,a[100005];
bool check(int x)
{
int lst=-2e9-1,cnt=0;
for(int i=1;i<=n;i++)
{
if(a[i]-2*x>lst)
{
lst=a[i];
cnt++;
}
}
if(cnt<=k) return 1;
return 0;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
int l=0,r=a[n];
while(l<r)
{
int mid=(l+r)>>1;
if(check(mid))
{
r=mid;
}
else l=mid+1;
}
printf("%d",l);
return 0;
}
T2 聪明的小明
https://gxyzoj.com/d/hzoj/p/3732
很抽象的状压dp
标签:总结,gxyzoj,cnt,比赛,20240705,int,mid,lst From: https://www.cnblogs.com/wangsiqi2010916/p/18286366