0
点赞
收藏
分享

微信扫一扫

AcWing 1929. 镜子田地 dfs+异或+反证

JamFF 2022-03-12 阅读 44
深度优先

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;
}

举报

相关推荐

0 条评论