題目:
解析
將所有回收站用數組存放,遍歷每個點,檢查這個點上下左右的點是否都存在這個數組中,如果是,則進一步對這個點進行評分,依舊是檢查這個點四個對角的點是否都存在。由此可見,需要兩層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;
}