输入输出样例

样例1

输入

  1. 7
  2. 1 2
  3. 2 1
  4. 0 0
  5. 1 1
  6. 1 0
  7. 2 0
  8. 0 1

输出

  1. 0
  2. 0
  3. 1
  4. 0
  5. 0

样例2

输入

  1. 2
  2. 0 0
  3. -100000 10

输出

  1. 0
  2. 0
  3. 0
  4. 0
  5. 0

样例3

输入

  1. 11
  2. 9 10
  3. 10 10
  4. 11 10
  5. 12 10
  6. 13 10
  7. 11 9
  8. 11 8
  9. 12 9
  10. 10 9
  11. 10 11
  12. 12 11

输出

  1. 0
  2. 2
  3. 1
  4. 0
  5. 0

题解一

遍历每一个的点,考察其是否符合回收站的要求,再计算其得分。总点数n的数据范围不大,但是坐标的范围比较大,因此不能用数组存储,用集合来存储。
100分。

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5. public class Main {
  6. public static void main(String[] args) throws IOException {
  7. final int[] DISX_1 = new int[] { 0, 0, -1, 1 };
  8. final int[] DISY_1 = new int[] { -1, 1, 0, 0 };
  9. final int[] DISX_2 = new int[] { -1, 1, -1, 1 };
  10. final int[] DISY_2 = new int[] { -1, -1, 1, 1 };
  11. final int DIR_NUM = 4;
  12. BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in));
  13. int n = Integer.parseInt(scanner.readLine());
  14. Set<Point> set = new HashSet<>();
  15. String[] strs;
  16. for (int i = 0; i < n; ++i) {
  17. strs = scanner.readLine().trim().split(" ");
  18. set.add(new Point(Integer.parseInt(strs[0]), Integer.parseInt(strs[1])));
  19. }
  20. int[] ans = new int[5];
  21. Point temp = new Point();
  22. int junk;
  23. int score;
  24. for (Point p : set) {
  25. junk = 0;
  26. for (int i = 0; i < DIR_NUM; ++i) {
  27. temp.x = p.x + DISX_1[i];
  28. temp.y = p.y + DISY_1[i];
  29. if (set.contains(temp)) {
  30. ++junk;
  31. } else {
  32. break;
  33. }
  34. }
  35. if (junk == 4) {
  36. score = 0;
  37. for (int i = 0; i < DIR_NUM; ++i) {
  38. temp.x = p.x + DISX_2[i];
  39. temp.y = p.y + DISY_2[i];
  40. if (set.contains(temp)) {
  41. ++score;
  42. }
  43. }
  44. ++ans[score];
  45. }
  46. }
  47. for (int i = 0; i < 5; ++i) {
  48. System.out.println(ans[i]);
  49. }
  50. }
  51. }
  52. class Point {
  53. int x;
  54. int y;
  55. public Point() {
  56. super();
  57. }
  58. public Point(int x, int y) {
  59. super();
  60. this.x = x;
  61. this.y = y;
  62. }
  63. @Override
  64. public boolean equals(Object obj) {
  65. if (obj instanceof Point) {
  66. Point p = (Point) obj;
  67. return (x == p.x) && (y == p.y);
  68. }
  69. return false;
  70. }
  71. @Override
  72. public int hashCode() {
  73. return Objects.hash(x, y);
  74. }
  75. }