import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class 1628{ public static void main(String[]args){ Scanner sc=new Scanner(System.in); int m=sc.nextInt(); int n=sc.nextInt(); int k=sc.nextInt(); int sum=0; ArrayList<ArrayList<Integer>>x=new ArrayList<>(); ArrayList<ArrayList<Integer>>y=new ArrayList<>(); for(int i=0;i<=m;i++){ x.add(new ArrayList<>()); } for(int i=0;i<=n;i++){ y.add(new ArrayList<>()); } for(int i=1;i<=m;i++){ x.get(i).add(n+1); } for(int i=1;i<=n;i++){ y.get(i).add(m+1); } for(int i=0;i<k; i++){ int a=sc.nextInt(); int b=sc.nextInt(); x.get(a).add(b); y.get(b).add(a); } for(int i=1;i<=m;i++){ int temp=0; Collections.sort(x.get(i)); for(int j=0;j<x.get(i).size();j++){ if(x.get(i).get(j)-temp>2){ sum++; } temp=x.get(i).get(j); } } for(int i=1;i<=n;i++){ int temp=0; Collections.sort(y.get(i)); for(int j=0;j<y.get(i).size();j++){ if(y.get(i).get(j)-temp>2){ sum++; }else if(y.get(i).get(j)-temp>1){ int xx=y.get(i).get(j)-1; temp=0; for(int l=0;l<x.get(xx).size();l++){ if(x.get(xx).get(l)>i){ if(x.get(xx).get(l)-temp<=2){ sum++; } break; } temp=x.get(xx).get(l); } } temp=y.get(i).get(j); } } System.out.println(sum); } }用Java换一种方式实现
时间: 2024-01-17 07:06:17 浏览: 122
这段 Java 代码实现了一个二维平面上的网格图,其中每个格子可以被视为一个点。给定一些坐标上的点,这些点可以连接成线段,如果两条线段有重叠部分,则这两条线段可以被视为相邻的。现在需要统计出这些点连接成的线段中,相邻线段的数量。
以下是另一种实现方式:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int k = scanner.nextInt();
int[][] grid = new int[m + 2][n + 2];
// 初始化网格图
for (int i = 0; i < grid.length; i++) {
Arrays.fill(grid[i], 0);
}
// 将给定的点加入网格图中
for (int i = 0; i < k; i++) {
int x = scanner.nextInt();
int y = scanner.nextInt();
grid[x][y] = 1;
}
int count = 0;
// 统计相邻线段的数量
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (grid[i][j] == 1) {
if (grid[i - 1][j] == 1) {
count++;
}
if (grid[i][j - 1] == 1) {
count++;
}
}
}
}
System.out.println(count);
}
}
```
这个实现方式利用二维数组来表示网格图,其中 1 表示该点存在,0 表示该点不存在。遍历整个网格图,如果当前点存在,就判断该点左边和上边的点是否也存在,如果存在,就统计相邻线段的数量。最后输出相邻线段的数量即可。
阅读全文