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 (贪心)