【CCF認證201912-2】回收站選址

題目:

在這裏插入圖片描述

解析

將所有回收站用數組存放,遍歷每個點,檢查這個點上下左右的點是否都存在這個數組中,如果是,則進一步對這個點進行評分,依舊是檢查這個點四個對角的點是否都存在。由此可見,需要兩層for循環,時間複雜度爲O(n^2)。

#include<bits/stdc++.h>
bool JudExit(int a[][3],int n,int x,int y)
{
	for(int i=0;i<n;i++)
	{
		if(a[i][0]==x && a[i][1]==y)
			return true;
	} 
	return false;
}
int main()
{

	int a[2000][3];
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&a[i][0],&a[i][1]);
	}
	int b[5],t;
	memset(b,0,sizeof(b));
	for(int i=0;i<n;i++)
	{
		
		if(JudExit(a,n,a[i][0]+1,a[i][1]) && JudExit(a,n,a[i][0],a[i][1]+1) 
		&& JudExit(a,n,a[i][0],a[i][1]-1) && JudExit(a,n,a[i][0]-1,a[i][1]))
		{
			t=0;
			if(JudExit(a,n,a[i][0]+1,a[i][1]+1))
				t++;
			if(JudExit(a,n,a[i][0]-1,a[i][1]-1))
				t++;
			if(JudExit(a,n,a[i][0]-1,a[i][1]+1))
				t++;
			if(JudExit(a,n,a[i][0]+1,a[i][1]-1))
				t++;
			b[t]++;
		}
		
	}
	for(int i=0;i<5;i++)
		printf("%d\n",b[i]);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章