201912-2 回收站选址

201912-2 回收站选址

思路:
将点的坐标设为map的键,将点上是否存在垃圾作为map的值(存在为1)。
通过num[score]求得得分0 1 2 3 4点的个数

#include<iostream>
#include<map>

using namespace std;
int num[5];//选址得分0 1 2 3 4点的个数
void isPlace(map<pair<int, int>, int >map, pair<int, int> p);//判断该点上下左右是否有垃圾(条件二)及可以被选址时的得分情况(条件三)

int main()
{
	int n; cin >> n;
	map<pair<int, int>, int >map;

	int x, y;
	for (int i = 0; i < n; i++)
	{
		cin >> x >> y;
		map[make_pair(x, y)] = 1;
	}
	for (auto it=map.begin();it!=map.end();it++)
	{
		if (map[make_pair(x, y)])//判断该点是否有垃圾(条件一)
			isPlace(map, it->first);
	}
	for (int i = 0; i < 5; i++)
		//cout << i << " 个数为: " << num[i] << endl;
		cout << num[i] << endl;

	return 0;
}

void isPlace(map<pair<int, int>, int >map, pair<int, int> p)
{
	int x = p.first, y = p.second;
	if (map[make_pair(x, y + 1)] && map[make_pair(x, y - 1)] && map[make_pair(x + 1, y)] && map[make_pair(x - 1, y)])
	{//(x,y)可以被选址
		int score = 0;
		//cout << "选定地点为:" << x << " " << y << endl;
		for (int i = -1; i <= 1; i = i + 2)
			for (int j = -1; j <= 1; j = j + 2)
				if (map[make_pair(x + i, y + j)])
				{
					score += map[make_pair(x + i, y + j)];
					
				}
					
		num[score]++;
	}
}

测试数据

7
1 2
2 1
0 0
1 1
1 0
2 0
0 1

11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11

猜你喜欢

转载自blog.csdn.net/helloworld0529/article/details/107706049