题目分析:题意还是挺好理解的。如果某点(有垃圾)的上、下、左和右都存在垃圾,则此点可以充当垃圾站。然后给此垃圾站评分,评分即为此垃圾站对角线含有垃圾的个数。根据上述题意解读,可以依次遍历每个点,检查其是否符合垃圾站的要求,若不符合,continue;若符合,则统计垃圾站的评分。
Note:数据的规模为,因此可以使用双循环遍历。数据的大小为,即使用int型整数即可。按照上述思路提交之后,发现只有80分,报错信息为运行出错。后检查为读入数据后添加
scanner.nextLine(); //读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行。
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int [][]points = new int[num][2];
for(int i=0;i<num;i++) {
points[i][0] = scanner.nextInt();
points[i][1] = scanner.nextInt();
}
int []lajizhan_num = new int[5];
Arrays.fill(lajizhan_num, 0);
for(int i=0;i<num;i++) {
int sum = 0;
boolean flag_up = false;
boolean flag_down = false;
boolean flag_left = false;
boolean flag_right = false;
for(int j=0;j<num;j++) {
if(i==j)
continue;
if((points[i][0]==points[j][0])&&((points[i][1]+1)==points[j][1]))
flag_up = true;
if((points[i][0]==points[j][0])&&((points[i][1]-1)==points[j][1]))
flag_down = true;
if(((points[i][0]-1)==points[j][0])&&(points[i][1]==points[j][1]))
flag_left = true;
if(((points[i][0]+1)==points[j][0])&&(points[i][1]==points[j][1]))
flag_right = true;
if(((points[i][0]+1)==points[j][0])&&((points[i][1]+1)==points[j][1]))
sum++;
if(((points[i][0]-1)==points[j][0])&&((points[i][1]-1)==points[j][1]))
sum++;
if(((points[i][0]+1)==points[j][0])&&((points[i][1]-1)==points[j][1]))
sum++;
if(((points[i][0]-1)==points[j][0])&&((points[i][1]+1)==points[j][1]))
sum++;
}
if(flag_up&&flag_down&&flag_left&&flag_right) {
lajizhan_num[sum]++;
}
}
for(int i=0;i<5;i++)
System.out.println(lajizhan_num[i]);
}
}