70分求助大佬!!真找不到问题,有注释#3 9 10
查看原帖
70分求助大佬!!真找不到问题,有注释#3 9 10
864036
Lzwywy楼主2023/3/16 15:23

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		st.nextToken();
		int n = (int) st.nval;
		st.nextToken();
		int m = (int) st.nval;
		int max = 0;
		int[] trees = new int[n];
		for (int i = 0; i < trees.length; i++) {
			st.nextToken();
			trees[i] = (int) st.nval;
			max = Math.max(max, trees[i]);//找到最长木材
		}
		int left = 0;
		int mid = 0;
		int ans = 0;
		while (left <= max) {
			mid = (left + max) / 2; //从中间点开始作为伐木机高度
			ans = 0;//重新累加
			for (int i = 0; i < n; i++) {
				if (trees[i] > mid) {//树的高度大于伐木机高度 
					ans += trees[i] - mid;//高的部分累加 
					// System.out.println(mid+"**"+ans);
				}
			}
			if (ans < m) {//木材不足 
				max = mid - 1;//在左边搜 减小高度增加木材 
			} else {
				left = mid + 1;//在右边搜 增加高度减小木材 
			}
		}
		out.print(left-1);
		out.close();
	}

}

2023/3/16 15:23
加载中...