xmu1214: 购物
1214: 购物
Time Limit: 500 MS Memory Limit: 64 MBSubmit: 10 Solved: 5
[Submit][Status][Web Board]
Description
为了组织班级聚会,wlnwyyfc来到新华都购买一种物品,这类物品的价值为P。他身上有N笔款项,每笔款项都有相应的价值。他希望使用这些款项至少要买M件这类物品,但是款项必须要单独使用,即不能合在一起去购买。问物品的价值P(必须为正整数)最大能为多少?
Input
第一行输入两个整数N(1<=N<=100,000),M(1<=M<=1,000,000,000)。
接下来输入N个正整数ai(1<=ai<=1,000,000,000),表示N笔款项的价值。
Output
输出一个数,表示P的最大值。如果没有满足的值,输出-1。
Sample Input
3 4
10 5 2
Sample Output
3
代码:
1 #include<stdio.h> 2 #define MAX(x,y)(x>y?x:y) 3 const int MAXN=100010; 4 int v[MAXN]; 5 int N,M; 6 int getm(int x){ 7 int t=0; 8 for(int i=0;i<N;i++){ 9 t+=v[i]/x; 10 } 11 return t; 12 } 13 int erfen(int l,int r){ 14 int mid; 15 while(r-l>1){ 16 mid=(l+r)>>1; 17 if(getm(mid)>=M)l=mid; 18 else r=mid; 19 } 20 if(getm(l)>=M)return l; 21 else return -1; 22 } 23 int main(){ 24 while(~scanf("%d%d",&N,&M)){ 25 int max=0; 26 for(int i=0;i<N;i++)scanf("%d",v+i),max=MAX(max,v[i]); 27 printf("%d\n",erfen(0,max)); 28 } 29 return 0; 30 }