输入输出样例

样例1

输入

  1. 4
  2. 4 74 -7 -12 -5
  3. 5 73 -8 -6 59 -4
  4. 5 76 -5 -10 60 -2
  5. 5 80 -6 -15 59 0

输出

  1. 222 1 0

样例2

输入

  1. 5
  2. 4 10 0 9 0
  3. 4 10 -2 7 0
  4. 2 10 0
  5. 4 10 -3 5 0
  6. 4 10 -1 8 0

输出

  1. 39 4 2

题解一

运行错误。80分。
模拟,不知道错在哪里。

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. public class Main {
  7. public static void main(String[] args) throws IOException {
  8. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  9. int n = Integer.parseInt(reader.readLine().trim());
  10. long T = 0;
  11. String[] strs;
  12. // 下落果树下标数组
  13. List<Integer> list = new ArrayList<>(n);
  14. // 是否发生下落
  15. boolean flag;
  16. long total, num;
  17. for (int i = 1, m; i <= n; ++i) {
  18. strs = reader.readLine().trim().split(" ");
  19. m = Integer.parseInt(strs[0]);
  20. total = Integer.parseInt(strs[1]);
  21. flag = false;
  22. for (int j = 2; j <= m; ++j) {
  23. num = Integer.parseInt(strs[j]);
  24. if (num > 0) {
  25. if (num < total) {
  26. total = num;
  27. flag = true;
  28. }
  29. } else {
  30. total += num;
  31. }
  32. }
  33. T += total;
  34. if (flag) {
  35. list.add(i);
  36. }
  37. }
  38. int D = list.size();
  39. int E = 0;
  40. if ((list.get(D - 1) == n) && (list.get(0) == 1) && (list.get(1) == 2)) {
  41. ++E;
  42. }
  43. if ((list.get(D - 1) == n) && (list.get(0) == 1) && (list.get(D - 2) == n - 1)) {
  44. ++E;
  45. }
  46. for (int i = 1; i < D - 1; ++i) {
  47. if ((list.get(i - 1) == list.get(i) - 1) && (list.get(i + 1) == list.get(i) + 1)) {
  48. ++E;
  49. }
  50. }
  51. System.out.println(T + " " + D + " " + E);
  52. }
  53. }