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


#include
#include
#include<string.h>
#include
#include
#include
#include 
#include
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)
    if(pre[whw]<=time&&pre[whw+1]>time)   break;
    if(whw!=sum)
    cout<1]+(time-pre[whw])/(whw+1)<<endl;
    else
    cout<<(time-pre[sum-1])/sum+meme[sum];
}

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

相关