4 条题解
-
1
n,m=map(int,input().split()) a=list(map(int,input().strip().split())) for i in range(n-1): for j in range(i+1,n): if a[j]<a[i]: a[j],a[i]=a[i],a[j] l=a[0];r=a[n-1] def check(x): ans=0 for i in range(n): if a[i]>x: ans+=a[i]-x if ans>=m: return True else: return False while l<=r: mid=(l+r)//2 if check(mid)==True: l=mid+1 else: r=mid-1 print(l-1)
-
0
太水了,甚至不用二分(doge)
#include <bits/stdc++.h> using namespace std; int tn[10000]; int m,n,al=0,am=0; int find(int h) { for (int i=n;i>=1;i--){ if (tn[i]<=h){ return n-i; } } return n; }//锯子往下拉一米 signed main(){ ios::sync\_with\_stdio(0); cin.tie(0); cin>>n>>m; for (int i=1;i<=n;i++){ cin>>tn[i]; al+=tn[i]; }//读数据 sort(tn+1,tn+n+1);//排序 int n0=tn[n]; am=0; while(am<m){ am+=find(n0--);//一直下拉锯子直到木头够用 } cout<<n0+1; }
- 1
信息
- ID
- 805
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 461
- 已通过
- 249
- 上传者