社区讨论

30分求救

P2937[USACO09JAN] Laserphones S参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo2d1eqr
此快照首次捕获于
2023/10/23 11:50
2 年前
此快照最后确认于
2023/11/03 11:59
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e2+10;
template <typename T> void read(T &x) {
	x=0; char c=getchar();int f=1;
	for (;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for (;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^48);
	x*=f;
}
const int dx[] = {1, 0, -1, 0}; 
const int dy[] = {0, 1, 0, -1};
int w,h,xx,yy,xxx,yyy,b,oi=-1;
char a[maxn][maxn];
int bfs(int x,int y)
{
	int n=0;
	if (xx==xxx&&yy==yyy)
	{
		return n;
	}
	for (int i=0;i<4;i++)
	{
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (oi!=-1&&a[nx][ny]!='*'&&a[nx][ny]=='.')
		{
			if((i%2==0&&oi%2==1)||(i%2==1)&&(i%2==0))
			{
				n++;
				oi=i;
			}
		}
		if (nx==xxx&&ny==yyy)
		{
			return n;
		}
		
	}
}
int main()
{
	read(w);read(h);
	for (int i=1;i<=w;i++)
	{
		for (int j=1;j<=h;j++)
		{
			cin>>a[i][j];
			if (a[i][j]=='C'&&b==0)
			{
				xx=i;
				yy=j;
				b=1;
			}
			else if (a[i][j]=='C'&&b==1)
			{
				xxx=i;
				yyy=j;
			}
		}
	}
	int ans=bfs(xx,yy);
	cout<<ans/2<<endl;
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...