#include <cstdio>
#include <map>
typedef long long ll;
using namespace std;
int main(){
int n;
pair<ll, ll> mp[1010];
int count[1010] = {0}; //记录上下左右垃圾个数
int count1[1010] = {0}; //记录四个角落垃圾个数
int result[5] = {0};
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%lld%lld", &mp[i].first, &mp[i].second);
}
//双重循环这里很巧 任何两个坐标都能组合一下 !!
for (int i = 0; i < n; i++){
for (int j = i + 1; j < n; j++){
if (mp[j].first == mp[i].first && mp[j].second == mp[i].second + 1 ||
mp[j].first == mp[i].first && mp[j].second == mp[i].second - 1 ||
mp[j].first == mp[i].first - 1 && mp[j].second == mp[i].second ||
mp[j].first == mp[i].first + 1 && mp[j].second == mp[i].second
){
count[i]++;
count[j]++; //两个相邻,都++
}
if (mp[j].first == mp[i].first - 1 && mp[j].second == mp[i].second - 1 ||
mp[j].first == mp[i].first - 1 && mp[j].second == mp[i].second + 1 ||
mp[j].first == mp[i].first + 1 && mp[j].second == mp[i].second - 1||
mp[j].first == mp[i].first + 1 && mp[j].second == mp[i].second + 1
){
count1[i]++;
count1[j]++;
}
}
}
for (int i = 0; i < n; i++){
if (count[i] == 4){
result[count1[i]]++;
}
}
for (int i = 0; i < 5; i++){
printf("%d\n", result[i]);
}
return 0;
}
201912-2回收站选址,时间复杂度很小!!
最新推荐文章于 2021-08-19 21:02:51 发布