题目:
解析
将所有回收站用数组存放,遍历每个点,检查这个点上下左右的点是否都存在这个数组中,如果是,则进一步对这个点进行评分,依旧是检查这个点四个对角的点是否都存在。由此可见,需要两层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;
}