本題問題主要就是處理座標的問題,因爲座標覆蓋在整個所有的象限,不僅限於第一象限座標,所以用數組來處理這些問題就很麻煩,我提供的思路就是用結構體來存放座標,剩下的就是查找,直接用for循環就可以了。
具體代碼如下:
```cpp
#include<bits/stdc++.h>
#define Max 1005
#define ll long long
using namespace std;
struct node{
ll X;
ll Y;
};
node g[Max];
int index1[4][2]={1,0,0,1,0,-1,-1,0};//上下左右
int index2[4][2]={-1,1,1,-1,1,1,-1,-1};//四個拐角
int main()
{
int n;
cin >> n;
int arr[5]={0};
ll x,y;
for(int i = 0;i<n;i++){
cin>>g[i].X>>g[i].Y;
}
if(n<5){
cout<<"0\n"<<"0\n"<<"0\n"<<"0\n"<<"0";
}
else{
for(int i = 0;i<n;i++){
int cnt =0,cnt1=0;
x = g[i].X;
y = g[i].Y;
for(int k = 0;k<4;k++){
ll x2 = x+index1[k][0];
ll y2 = y+index1[k][1];
for(int j = 0;j<n;j++){
if(g[j].X==x2 && g[j].Y==y2){
cnt++;
}
}
}
for(int k = 0;k<4;k++){
ll x2 = x+index2[k][0];
ll y2 = y+index2[k][1];
for(int j = 0;j<n;j++){
if(g[j].X==x2 && g[j].Y==y2){
cnt1++;
}
}
}
if(cnt==4){
arr[cnt1]++;
}
}
for(int p = 0;p<5;p++){
cout<<arr[p]<<endl;
}
memset(arr,0,sizeof(arr));
}
return 0;
}