2 solutions
-
3
Nan, 真 De Nan#include<iostream> #define int long long using namespace std; int n,M,N; int a[1000000];// ... bool ch(int m)//检测是否大于所需要的树木 { int s=0; for(int i=0;i<n;i++) { if(m<a[i]) { s+=a[i]-m; } } return s<M; } signed main()//用了define { cin>>n>>M;//输入 for(int i=0;i<n;i++) cin>>a[i];//输入 int l=0,r=0,m;//左,右,中 for(int i=0;i<n;i++) { r=max(a[i],r);//最高的 } while(l<=r)//边界 { m=(l+r)>>1;//一半(中分,下面有彩蛋) if(ch(m))//这里是检测 不 符合要求的 { r=m-1;//右边缩半 } else { l=m+1;//左边缩半(符合要求) } } cout<<l-1;//输出 return 0;//完结散花 }
思路简单
死鹿剑弹
歹马易写
代码爆炸
红军长征Nan
信奥代码Nan
ikun __--/\--__ /-/ \-\ / | 答 | \ \________/ mmmmmmmmmmmmmmmmmmmm mmmmmmmm mmmm mmmmmmmm mm mm mmmm mm mm mm mm mmmm mm mm mm mm mmmm mm mm mm mm mmmm mm mm mm mm mmmm mm mm篮球 mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
-
-5
from 课件
#include <bits/stdc++.h> using namespace std; int main(){ const int MAX_N= 1e6+5; int tree[MAX_N],n,m; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>tree[i]; } sort(tree+1,tree+n+1); long long sum=0; int idx=n; while(sum<m){ sum+=(long long)(tree[idx]-tree[idx-1])*(n-idx+1); idx--; } idx++; int itn=tree[idx-1]+(int)((sum-m)/(n-idx+1)); cout<<itn; }
- 1
Information
- ID
- 998
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 8
- Tags
- # Submissions
- 223
- Accepted
- 31
- Uploaded By