cf231c

来源:互联网 发布:棋牌源码交易平台 编辑:程序博客网 时间:2024/06/07 01:40
#include <iostream>#include <stdio.h>#include <algorithm>//数学知识:数列:对于长度t,求ai-a(i-1)+ai-a(i-2)+……+ai-a(i-t+1)//                          =ai*t-(ai+a(i-1)+a(i-2)+a(i-t+1))=ai*t-(Si-S(i-t))!using namespace std;const int INF=0x7fffffff;int n,k;long long a[100010];//这里注意,因为有a[i]与long long 类型的运算,所以也定义为long longlong long max_len_num;long long sum[100010];bool f(int t){    long long tmp;    for(int i=t-1; i<n; i++)    {        if(i==t-1) tmp=a[i]*t-sum[i];        else            tmp=a[i]*t-sum[i]+sum[i-t];        if(tmp<=k)        {            max_len_num=a[i];            return true;        }    }    return false;}int main(){    scanf("%d%d",&n,&k);    for(int i=0; i<n; i++) scanf("%lld",&a[i]);    sort(a,a+n);    sum[0]=a[0];    for(int i=1; i<n; i++) sum[i]=sum[i-1]+a[i];    int h=n;    int l=1;    int mid;    while(l<=h)    {        mid=(h+l)/2;        if(f(mid)) l=mid+1;        else h=mid-1;    }    printf("%d %lld\n",h,max_len_num);    return 0;}
原创粉丝点击