1 条题解
-
0
C :
#include <stdlib.h> #include <stdio.h> int x[100005],N,C; int cmp(const void *a, const void *b) { return(*(int *)a-*(int *)b); } int f(int a) { int i,s=1,p=0; for(i=1; p+i<N; i++) { if(x[p+i]-x[p]>=a) { p=p+i; s++; i=0; } } if(s>=C) return 1; else return 0; } int main() { int i,a,b,c,ans; while(~scanf("%d%d",&N,&C)) { for(i=0; i<N; i++) scanf("%d",&x[i]); qsort(x,N,sizeof(x[0]),cmp); a=1; b=x[N-1]-x[0]; while(a<=b) { c=(a+b)/2; if(f(c)) { a=c+1; ans=c; } else b=c-1; } printf("%d\n",ans); } return 0; }
C++ :
#include<stdio.h> #include<algorithm> using namespace std; int a[100010],n,c; bool greed( int t) { int i,j=a[0],count=0; for(i=0;i<n;i++) { if(a[i]-j>=t) {j=a[i]; count++;} if(count>=c-1) return true; } return false; } void binary_search() { int front=0,end=a[n-1]-a[0]; int mid; while(front<=end) { mid=(front + end )/2; if(greed(mid)) front=mid+1; else end=mid-1; } printf("%d\n",front-1); } int main() { int i; while(scanf("%d %d",&n,&c)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); binary_search(); } return 0; }
- 1
信息
- ID
- 703
- 时间
- 3000ms
- 内存
- 64MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者