AcWing 1929. 镜子田地
打卡
参考和讲解:
AcWing 1929. 镜子田地 -> 图示方向改变
AcWing 1929. 镜子田地 简洁代码 + 证明
#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<=n;i++)
#define mem(a,x) memset(a,x,sizeof(a));
#define pb push_back
#define INF 0x3f3f3f3f
#define pii pair<int,int>
#define fi first
#define se second
typedef long long ll;
const int N=1e3+10;
int n,m;
int g[N][N];
int ans;
int v[N][N];
//0 1 2 3 上 右 下 左
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y,int sum,int now)
{
ans=max(ans,sum);
now=now^g[x][y];
int xx=x+dx[now],yy=y+dy[now];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m)
dfs(xx,yy,sum+1,now);
}
int main()
{
cin>>n>>m;
fir(i,1,n)
fir(j,1,m)
{
char ch;int t;cin>>ch;
if(ch=='/') t=1;
else t=3;
g[i][j]=t;
}
ans=0;
for(int i=1;i<=n;i++)
{
dfs(i,1,1,1);
dfs(i,m,1,3);
}
for(int j=1;j<=m;j++)
{
dfs(1,j,1,2);
dfs(n,j,1,0);
}
cout<<ans;
return 0;
}