方法一:
#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include<queue>
using namespace std;
bool findxy(vector<pair<int, int>>& vp, int x, int y) //查找点(x,y)是否为垃圾点
{
for (int i = 0; i < vp.size(); i++)
{
if (vp[i].first == x && vp[i].second == y)
{
return true;
}
}
return false;
}
int main() {
int n; //已查明的垃圾点个数
cin >> n;
vector<pair<int, int>> vp(n); //记录垃圾点坐标
vector<int> scorenum(5); //各个得分的选址个数
for (int i = 0; i < n; i++)
{
int x, y;
cin >> x >> y;
pair<int, int> p(x, y);
vp[i] = p;
}
for (int i = 0; i < n; i++)
{
int x = vp[i].first;
int y = vp[i].second;
if (findxy(vp, x - 1, y) && findxy(vp, x, y - 1) && findxy(vp, x + 1, y) && findxy(vp, x, y + 1))
//先判断点(x,y)是否可以作为选址
{
int score = 0;
//依次计算选址的得分
if (findxy(vp, x - 1, y - 1)) score++;
if (findxy(vp, x - 1, y + 1)) score++;
if (findxy(vp, x + 1, y - 1)) score++;
if (findxy(vp, x + 1, y + 1)) score++;
scorenum[score]++;
}
}
for (int i = 0; i <= 4; i++)
{
cout << scorenum[i] << endl;
}
return 0;
}
原本的想法是利用哈希表:unordered_map<pair<int,int>,int>来存储垃圾点坐标,这样在后续判断某个坐标是否为垃圾点时,只需要使用count()函数即可,但是辛苦敲完代码后发现,在unordered_map中使用pair作为关键值的用法已经被删除了(编译器也没有提示 = =),最后实在想不到什么好方法了,于是只能用vector<pair<int,int>>来存储垃圾点坐标,查找某个坐标是否为垃圾点时也只能暴力寻找,没想到还真就过了。
反思一下,能不用暴力解法就不用暴力解法,但如果实在没有什么好方法了,那么暴力解法至少还能得点分数,或许还真就过了也说不定?