栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 前沿技术 > 云计算 > 云平台

【202206-2】寻宝!大冒险!

云平台 更新时间:发布时间: 百科书网 趣学号
Attention:

①如用memset初始化,需要添加头文件。
②各个变量的范围需要确定好。
③题中L最大是10^9,无法开那么大的二维数组,故以下代码只能得70分。

#include
using namespace std;
#define MAX 2005

struct map {
	int x, y;
}map[MAX];
int mapGlobal[MAX][MAX] = { 0 };
int mapLocal[MAX][MAX] = { 0 };

int main()
{
	int n, L, S, x, y, flag, num = 0;
	scanf("%d %d %d", &n, &L, &S);
	for (int i = 0; i < n; ++i)
	{
		scanf("%d %d", &x, &y);
		mapGlobal[x][y] = 1;
		map[i].x = x, map[i].y = y;
	}
	for (int i = S; i >= 0; --i)
		for (int j = 0; j <= S; ++j)
		{
			scanf("%d", &x);
			mapLocal[i][j] = x;
		}

	for (int i = 0; i < n; ++i)
	{
		x = map[i].x, y = map[i].y, flag = 0;
		if (x <= L - S && y <= L - S)
		{
			for (int j = 0; j <= S; ++j)
			{
				for (int k = 0; k <= S; ++k)
					if (mapLocal[j][k] != mapGlobal[j + x][k + y])
					{
						flag = 1;
						break;
					}
				if (flag == 1)break;
			}
			if (flag == 0)num++;
		}
	}
	printf("%d", num);
	return 0;
}

这道题的关键就在于如何进行大数据的存储。
查找资料后,发现可以使用STL中的map容器。
map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,从而提高了查找的效率。
其相关用法如下:

①加头文件

#include

②定义一个二维的map

map>mapGlobal;

对于map映射,是第一个数据(key)映射到第二个数据(value)上,即形成了key-value的映射关系。其中,每个关键字只能出现一次,以作索引。
这个map中的key是int型,value是map类型。

③赋值(类似二维数组)

mapGlobal[x][y] = 1;

因此,进行几处小改动后就可以通过,AC代码如下:

#include
#include
using namespace std;
#define MAX 2005

struct m {
	int x, y;
}m[MAX];
map>mapGlobal;
int mapLocal[MAX][MAX] = { 0 };

int main()
{
	int n, L, S, x, y, flag, num = 0;
	scanf("%d %d %d", &n, &L, &S);
	for (int i = 0; i < n; ++i)
	{
		scanf("%d %d", &x, &y);
		mapGlobal[x][y] = 1;
		m[i].x = x, m[i].y = y;
	}
	for (int i = S; i >= 0; --i)
		for (int j = 0; j <= S; ++j)
		{
			scanf("%d", &x);
			mapLocal[i][j] = x;
		}

	for (int i = 0; i < n; ++i)
	{
		x = m[i].x, y = m[i].y, flag = 0;
		if (x <= L - S && y <= L - S)
		{
			for (int j = 0; j <= S; ++j)
			{
				for (int k = 0; k <= S; ++k)
					if (mapLocal[j][k] != mapGlobal[j + x][k + y])
					{
						flag = 1;
						break;
					}
				if (flag == 1)break;
			}
			if (flag == 0)num++;
		}
	}
	printf("%d", num);
	return 0;
}
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1072812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号