[题解]CSP-回收站选址

文章目录


题目链接.

算法思路

主要利用了三元数组思想来存储压缩矩阵。这里着重利用了 STL 中的pair以及map,代码显得比较简洁。用pair存储垃圾坐标点,并用作中map的键值,其次查找map中的元素特别方便,且速度较快,只需O(N)。

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

int n;
pair<int, int> place[N];            //记录垃圾坐标
map <pair<int, int>, int> rubbish; //用 map 方便查找垃圾位置
int number[5] = {};//记录各个得分的回收站个数, number[i] 表示得分为 i 的回收站个数

int main()
{
	int i, x, y;
	scanf("%d", &n);
	for ( i = 1; i <= n; i++)
	{
		scanf("%d%d", &place[i].first, &place[i].second);
		rubbish[place[i]] = 1;
	}

	for ( i = 1; i <= n; i++)
	{
		x = place[i].first;
		y = place[i].second;
		if (rubbish[make_pair(x, y + 1)]
		&&  rubbish[make_pair(x, y - 1)]
		&&  rubbish[make_pair(x + 1, y)]
		&&  rubbish[make_pair(x - 1, y)])
		{
			number[rubbish[make_pair(x + 1, y + 1)] 
				 + rubbish[make_pair(x + 1, y - 1)]
				 + rubbish[make_pair(x - 1, y + 1)]
				 + rubbish[make_pair(x - 1, y - 1)]]++;
		}
	}
	for ( i = 0; i <= 4; i++)
	{
		printf("%d\n", number[i]);
	}
	return 0;
}

结果分析

得分100分,用时15ms,空间使用2.984MB,时间复杂度为 O(N^2)。

猜你喜欢

转载自blog.csdn.net/weixin_44092088/article/details/110292286