CCF 2019-12 回收站选址

å¨è¿éæå¥å¾çæè¿°



题目分析:题意还是挺好理解的。如果某点(有垃圾)的上、下、左和右都存在垃圾,则此点可以充当垃圾站。然后给此垃圾站评分,评分即为此垃圾站对角线含有垃圾的个数。根据上述题意解读,可以依次遍历每个点,检查其是否符合垃圾站的要求,若不符合,continue;若符合,则统计垃圾站的评分。

Note:数据的规模为10^{3},因此可以使用双循环遍历。数据的大小为\left | 10^{9} \right |,即使用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]);

	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章