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

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 1929. 镜子田地 dfs+异或+反证相关的知识,希望对你有一定的参考价值。

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;


以上是关于AcWing 1929. 镜子田地 dfs+异或+反证的主要内容,如果未能解决你的问题,请参考以下文章

算法刷题AcWing 102. 最佳牛围栏——二分

AcWing 143. 最大异或对

AcWing 143. 最大异或对

AcWing 143. 最大异或对

AcWing 143. 最大异或对

AcWing 143. 最大异或对 (异或性质,Trie)