回收站选址

#include<bits/stdc++.h>
using namespace std;

const int N=1000;
pair<int,int> p[N];
int cnt[5];
int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int n;
    map<pair<int,int>,int> ps; 
    cin>>n;
    for(int i=0;i<n;++i){
        int x,y;
        cin>>x>>y;
        p[i] =make_pair(x,y);
        ps[p[i]] =1;
    }
    for(int i=0;i<n;++i){
        int x=p[i].first;
        int y=p[i].second;
        if(ps[make_pair(x,y+1)] && ps[make_pair(x,y-1)] &&ps[make_pair(x+1,y)] &&ps[make_pair(x-1,y)])
        {
            ++cnt[ps[make_pair(x+1,y+1)]+ps[make_pair(x+1,y-1)] +ps[make_pair(x-1,y+1)]+ps[make_pair(x-1,y-1)]];
        }
    }
    for(int i=0;i<5;i++)
    cout<<cnt[i]<<endl;
    return 0;
} 

注意:

1.unordered_map由于底层是以哈希表的形式实现的,因此没有直接提供关于pair的接口,即unordered_map<pair<int,int>,int>这种形式是不合法的,因此采用map<pair<int,int>,int>。

2.本题的难度在于数据的存储形式上,以map来存储整个图,以pair<int,int>作为键值,克服了以x为键值会出现重复键值的情况,同时value标记着时候存储了某点,便于统计,计算。

3.额外引进一个数组p[N]记录好相应的键值,便于对map的访问。

posted @ 2020-08-30 21:37  zmachine  阅读(207)  评论(0编辑  收藏  举报