完全看不懂题意。。。。百度搜搜才看懂题意 然后就参考代码了 和yougth的最大化()nyoj914差不多的方法 二分+贪心
#include <stdio.h> #include <algorithm> using namespace std; int c,a[100005],n; bool judge(int k) { int p=a[0],cnt=1;//也就这里注意点 从1开始 自己想想为啥 for(int i=1;i<n;i++) { if(a[i]-p>=k) cnt++,p=a[i]; if(cnt>=c) return true; } return false; } int bin_search(int right)//步步逼近最小值。 { int left=0,mid; while(left<=right) { mid=(left+right)/2; if(judge(mid)) left=mid+1; else right=mid-1; } return left-1; } int main() { while(scanf("%d %d",&n,&c)!=EOF) { for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n);//从小到大排序 printf("%d\n",bin_search(a[n-1]-a[0]));//a[n-1]-a[0]最大差值 } return 0; }
时间: 2024-12-27 06:00:07