代码源div1 每日一题 二分答案

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
#include<iostream>
#include<algorithm>
#include<queue> 
#include<bitset>
typedef long long ll;
using namespace std;
ll meme[100009],pre[100009];
int main()
{
    ll sum,time;cin>>sum>>time;
    for(int i=1;i<=sum;i++)  
    cin>>meme[i];
    sort(meme+1,meme+sum+1);
    for(int j=2;j<=sum;j++)
    pre[j-1]=(meme[j]-meme[j-1])*(j-1)+pre[j-2];
    ll whw;
    for(whw=1;whw<sum;whw++)
    if(pre[whw]<=time&&pre[whw+1]>time)   break;
    if(whw!=sum)
    cout<<meme[whw+1]+(time-pre[whw])/(whw+1)<<endl;
    else
    cout<<(time-pre[sum-1])/sum+meme[sum];
}

这题没用二分,具体构造贪心了一下,统计排序后第走到第i个高度所需要的次数,然后根据区间分数

posted on 2022-04-24 18:27  zesure  阅读(33)  评论(0编辑  收藏  举报

导航