xmu1214: 购物

1214: 购物

Time Limit: 500 MS  Memory Limit: 64 MB
Submit: 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 }

 

posted @ 2015-10-07 22:09  handsomecui  阅读(154)  评论(0编辑  收藏  举报