cspccf 202206-2 寻宝!大冒险!

    cspccf 202206-2 寻宝!大冒险!_第1张图片

cspccf 202206-2 寻宝!大冒险!_第2张图片

这道题我最初的思路是,以数组形式分别存储绿化图和藏宝图,然后从绿化图的(0,0)位置开始便利,如果没有超出绿化图范围,并且藏宝图完全符合绿化图,那么结果+1。但是由于L的取值过大,只能AC 70%。代码如下:

#include
using namespace std;
long long n,l,s;//树的棵树,绿化图和藏宝图大小
int a[2005][2005]={0};
int b[2005][2005]={0};
int main()
{
	cin>>n>>l>>s;
	int count = 0;//最后结果 
	bool flag = true; 
	for(int i=1;i<=n;i++) //按照题目要求将绿化图初始化 
	{
		int x,y;
		cin>>x>>y;
		a[x][y]=1;
	}
	for(int i=s;i>=0;i--) //输入藏宝图 
		for(int j=0;j<=s;j++) 
			cin>>b[i][j];
			
	for(int i=0;i<=l;i++)  //从初始位置开始遍历 
	{
		for(int j=0;j<=l;j++)
		{
			if(b[0][0]==a[i][j] && i+s<=l && j+s<=l) //如果藏宝图的 0,0 等于绿化图的某一点并且不超边界 
			{
				for(int k=0;k<=s;k++) //遍历藏宝图,如果完全符合则+1,否则退出进行下次遍历 
				{
					for(int h=0;h<=s;h++)  
					{
						if(b[k][h]==a[i+k][j+h]) continue;
						
						else{
							flag=false;
							break;
						} 
					}
					if(!flag) break;
				}
				if(flag) count++;
			}
			flag = true;
		}
	}
	cout<

那么如何避免数组过大无法通过全部测试点的问题,可以借鉴:(94条消息) 第26次ccf认证第二题:寻宝!大冒险!_Sunnyztg的博客-CSDN博客_csp第二题难度

你可能感兴趣的:(蓝桥杯,c++,算法)