Java实现洛谷 P1873 砍树(StreamTokenizer+IO+二分)

我就是我 2023-07-21 11:14 43阅读 0赞

P1873 砍树

在这里插入图片描述

  1. 输入输出样例
  2. 输入
  3. 5 20
  4. 4 42 40 26 46
  5. 输出
  6. 36

PS:
get新知识,以前只知道STringTokenizer并没有了解过StreamTokenizer,这次才知道
原来io输入的jdk提供了方法接收这个,大概感觉貌似差不多,好久没用io了,一边百度一边用
现学现卖哈哈

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStreamWriter;
  5. import java.io.PrintWriter;
  6. import java.io.StreamTokenizer;
  7. public class 砍树 {
  8. public static void main(String[] args) throws IOException {
  9. StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
  10. PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
  11. in.nextToken();
  12. int n = (int)in.nval;
  13. in.nextToken();
  14. int m = (int)in.nval;
  15. int[] s = new int[n];
  16. int l = 0,r = 0;
  17. for(int i = 0;i < n;i++) {
  18. in.nextToken();
  19. s[i] = (int)in.nval;
  20. r = Math.max(r, s[i]);
  21. }
  22. while(l <= r) {
  23. int mid = (l + r) / 2;
  24. if(judge(mid,s,m)) {
  25. l = mid + 1;
  26. }else {
  27. r = mid - 1;
  28. }
  29. }
  30. out.print(l - 1);
  31. out.close();
  32. }
  33. public static boolean judge(int mid,int[] s,int m) {
  34. int sum = 0;
  35. for(int i = 0;i < s.length;i++) {
  36. if(s[i] > mid) {
  37. sum += (s[i] - mid);
  38. if(sum >= m) {
  39. return true;
  40. }
  41. }
  42. }
  43. return false;
  44. }
  45. }

发表评论

表情:
评论列表 (有 0 条评论,43人围观)

还没有评论,来说两句吧...

相关阅读

    相关 P1040 加

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为

    相关 P1087 FBI

    题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类