poj 2456

it2022-05-24  75

最大值最小化,还是不大理解怎么区分,但这个题比较简单,就是不断试出一个最大值

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=100000+10; long long int a[maxn]; int n,m; bool cc(int d) { int last=0,cnt; for(int i=1;i<m;i++) { cnt=last+1; while(cnt<n&&a[cnt]-a[last]<d) cnt++; if(cnt==n) return false;//超界了,说明不能铺开m-1个d last=cnt; } return true; } int main() { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); int l=1,r=a[n-1]-a[0]; while(l<=r) { int mid=(l+r)/2; if(cc(mid)) l=mid+1;//能铺开据再找一个更大的d,直到找到最大的能铺开的d else r=mid-1; } printf("%d\n",l-1); return 0; }

 

转载于:https://www.cnblogs.com/Wangwanxiang/p/6694845.html

相关资源:数据结构—成绩单生成器

最新回复(0)