solution-cf877d

题解 CF877D 【Olya and Energy Drinks】

原题

一道几乎板子的广搜题。(然而我调了10几次才过

我们只需要在广搜板子的基础上添加移动 $1 -k $步的部分即可

就像这样:

int h[] = {-1 , 1 , 0 , 0};
int l[] = {0 , 0 , -1 , 1};
for(int i = 0;i < 4;i++)
{
	for(int j = 1;j <= k;j++)
	{
	    int xx = x + h[i] * j;
	    int yy = y + l[i] * j;
	    ...    
	}
}

值得注意的是这里一旦走出了地图或者头撞南墙就要直接break

就像这样:

int h[] = {-1 , 1 , 0 , 0};
int l[] = {0 , 0 , -1 , 1};
for(int i = 0;i < 4;i++)
{
	for(int j = 1;j <= k;j++)
	{
	    int xx = x + h[i] * j;
	    int yy = y + l[i] * j;
		if(x < 0 || x >= n || y <= 0 || y >= m) // 这里地图从0开始存 
		    break;
		if(a[x][y] == '#')
			break;
	    ...
	}
}

其余部分就和板子一样啦。

代码不贴了

posted @ 2024-03-06 16:55  iorit  阅读(14)  评论(0)    收藏  举报