回收站选址
#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的访问。