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]);

	}

}

 

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