代码源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个高度所需要的次数,然后根据区间分数