2021.8.19提高B组模拟9T1 + P7411 [USACO21FEB] Comfortable Cows(dfs)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.19提高B组模拟9T1 + P7411 [USACO21FEB] Comfortable Cows(dfs)相关的知识,希望对你有一定的参考价值。

Comfortable Cows

题目传送门

题目

输入样例

9
0 1
1 0
1 1
1 2
2 1
2 2
3 1
3 2
4 1

输出样例

0
0
0
1
0
0
1
2
4

解题思路

这题就是暴搜

因为每次新加一个点影响的只是当前点和四周点而已

那我们就可以暴力搜索周围

判断是否对答案影响

AC代码

#include<cstdio>
using namespace std;
int n,o,ans,c[3005][3005];
int dx[5]={0,0,1,-1,0};
int dy[5]={1,-1,0,0,0};
void dfs(int x,int y)//dfs
{
	if(!c[x][y])return;//这个点根本不是牛就跳过
	int o=0,px,py;
	for(int i=0;i<4;i++)//四个方向
	{
		int xx=x+dx[i],yy=y+dy[i];
		if(c[xx][yy])o++;
		else px=xx,py=yy;
	}
	if(o==3)//如果周围刚好有三头牛
	{
		c[px][py]=1;//再加一头
		ans++;
		for(int i=0;i<5;i++)//五个方向(包含新加的牛)
		{
			int xx=px+dx[i],yy=py+dy[i];
			dfs(xx,yy);
		}
	}
	return;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		x+=1000;y+=1000;
		if(c[x][y])ans--;//判断是否重复
		c[x][y]=1;
		for(int j=0;j<5;j++)//五个方向(包含新加的牛)
		{
			int xx=x+dx[j],yy=y+dy[j];
			dfs(xx,yy);
		}
		printf("%d\\n",ans);
	}
	return 0;
}

谢谢

以上是关于2021.8.19提高B组模拟9T1 + P7411 [USACO21FEB] Comfortable Cows(dfs)的主要内容,如果未能解决你的问题,请参考以下文章

2021.8.19提高B组模拟9T3 + P7410 [USACO21FEB] Just Green Enough (贪心)

2021.8.19提高B组模拟9T3 + P7410 [USACO21FEB] Just Green Enough (贪心)

2021.8.19提高B组模拟9T2 + P7412 [USACO21FEB] Year of the Cow (贪心)

2021.8.19提高B组模拟9T2 + P7412 [USACO21FEB] Year of the Cow (贪心)

2017.12.09NOIP提高组模拟赛A组

2017.07.16【NOIP提高组】模拟赛B组 卫星照片 题解