#include#includeintmain(){int n, m,sum=0;scanf("%d%d",&n,&m);int* p =(int*)malloc(sizeof(int)* n);for(int i =0; i < n; i++){scanf("%d", p + i);sum += p[i];}sum /= m;while(1){int o =0;for(int i =0; i < n; i++){o += p[i]/ sum;}if(o == m){printf("%d", sum);break;}sum--;}free(p);}
二分法(C语言)
intcut(int*p,int v,int n){int o =0;for(int i =0; i < n; i++){o += p[i]/ v;}return o;}#include#includeintmain(){int n, m,sum=0;scanf("%d%d",&n,&m);int* p =(int*)malloc(sizeof(int)* n);for(int i =0; i < n; i++){scanf("%d", p + i);sum += p[i];}sum /= m;for(int i =1,j=sum; i <= j; i++){int v =(i + j)/2;if(cut(p,v,n)== m&&cut(p,v+1,n)!=m){printf("%d", v);break;}elseif(cut(p, v, n)<m){j = v -1;}else{i = v+1;}}free(p);}