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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值