c++可以AC
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
int a[1000000+5];
bool check(int h){
long sum = 0;
for(int i=1;i<=n;i++){
if(a[i]>h)
sum += a[i] - h;
}
if(sum>=m){
return true;
}else{
return false;
}
}
int main(){
cin>> n >> m;
int right = -1;
for(int i=1;i<=n;i++){
cin >> a[i];
right = max(right,a[i]);
}
int left=1;
while(left<=right){
int mid = (left+right)>>1;
if(check(mid)){
ans = mid;
left = mid +1;
}else{
right = mid -1;
}
}
cout << ans << endl;
return 0;
}
Java三个点MLE,同样思路
import java.util.*;
public class Main {
public static int n,m,right,left,ans;
public static int[] a = new int[1000000+5];
public static boolean check(int h){
long sum = 0;
for(int i=1;i<=n;i++){
if(a[i]>h)
sum += a[i] - h;
}
if(sum>=m){
return true;
}else{
return false;
}
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
right = -1;
for(int i=1;i<=n;i++){
a[i] = scanner.nextInt();
right = Math.max(right,a[i]);
}
left=1;
while(left<=right){
int mid = (left+right)>>1;
if(check(mid)){
ans = mid;
left = mid +1;
}else{
right = mid -1;
}
}
System.out.println(ans);
}
}