解
使用set来存储每一个点,通过查询其八个方向是否存在点来解题
//
// Created by 29273 on 2021-04-07.
//
#include "bits/stdc++.h"
using namespace std;
int dir[8][2] = {{0, 1},
{0, -1},
{1, 0},
{-1, 0},
{1, -1},
{-1, -1},
{1, 1},
{-1, 1}};
int res[5];
int main() {
set<pair<int, int>> m;
int n, a, b;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a >> b;
m.insert(pair<int, int>(a, b));
}
for (auto it:m) {
int flag = 1, grade = 0;
for (int i = 0; i < 4; ++i) {
if (m.find(pair<int, int>(it.first + dir[i][0], it.second + dir[i][1])) == m.end()) {
flag = 0;
break;
}
}
if (flag) {
for (int i = 4; i < 8; i++) {
if (m.find(pair<int, int>(it.first + dir[i][0], it.second + dir[i][1])) != m.end()) {
grade += m.find(pair<int, int>(it.first + dir[i][0], it.second + dir[i][1])) != m.end();
// cout << it.first + dir[i][0] << " " << it.second + dir[i][1] << endl;
}
}
res[grade]++;
}
}
for (auto i :res)
cout << i << endl;
return 0;
}