蒟蒻尹 2022-01-23 22:10 采纳率: 50%
浏览 30

啊~~洛谷AT319 3Match WA 啦 orz ~ hellp!

题目连接:
https://www.luogu.com.cn/problem/AT319

code:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int k;
char a[1000][1000];
int ans=0;
int flag;
void dfs(int x,int y,char ss,int fangxiang) {
//fangxiang:记录是从什么方向爬到当前位置的,fangxiang=1,由上方或下方爬来的;fangxiang=2,由左方或右方爬来的; 
    a[x][y]='t';
    k++;
    if(a[x+1][y]==ss&&x+1<=n) {//如果方向不同则 flag++ 
        if(fangxiang==1)
            flag++;
        dfs(x+1,y,ss,2);
    }
    if(a[x-1][y]==ss&&x+1>=1) {
        if(fangxiang==1)
            flag++;
        dfs(x-1,y,ss,2);
    }
    if(a[x][y+1]==ss&&y+1<=m) {
        if(fangxiang==2)
            flag++;
        dfs(x,y+1,ss,1);
    }
    if(a[x][y-1]==ss&&y-1>=1) {
        if(fangxiang==2)
            flag++;
        dfs(x,y-1,ss,1);
    }
}
int main() {
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            cin>>a[i][j];
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++) {
            k=0;
            flag=0;
            if(a[i][j]!='t')
                dfs(i,j,a[i][j],0);
            if(k>=3) {
                if((k==3&&flag>=1)||(k==4&&flag>=2))
//          如果长度==3,且转过1次向      或      如果长度==4,且转过2次向 , 跳出 
                    break;
                else
                    ans++;
            }
//            cout<<"\n";
//            for(int i=1; i<=n; i++) {
//                for(int j=1; j<=m; j++)
//                    cout<<a[i][j];
//                cout<<"\n";
//            }
        }


    printf("%d",ans);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 蒟蒻尹 2022-01-23 22:39
    关注

    又写了个代码,还是WA了 555555555~~

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int k;
    char a[1000][1000];
    int ans=0;
    int flag;
    void dfs(int x,int y,char ss,int fangxiang) {
    //fangxiang:记录是从什么方向爬到当前位置的,fangxiang=1,由上方或下方爬来的;fangxiang=2,由左方或右方爬来的; 
        a[x][y]='t';
        k++;
        int uu=0,u=0;
        if(a[x+1][y]==ss&&x+1<=n) {//如果方向不同则 flag++ 
            if(fangxiang==1)
                flag++;
            u++;
            dfs(x+1,y,ss,2);
        }
        if(a[x-1][y]==ss&&x+1>=1) {
            if(fangxiang==1)
                flag++;
            u++;
            dfs(x-1,y,ss,2);
        }
        if(a[x][y+1]==ss&&y+1<=m) {
            if(fangxiang==2)
                flag++;
            uu++;
            dfs(x,y+1,ss,1);
        }
        if(a[x][y-1]==ss&&y-1>=1) {
            if(fangxiang==2)
                flag++;
            uu++;
            dfs(x,y-1,ss,1);
        }
        if(uu&&u)
           flag++;
    }
    int main() {
        scanf("%d%d",&n,&m);
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
                cin>>a[i][j];
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++) {
                k=0;
                flag=0;
                if(a[i][j]!='t')
                    dfs(i,j,a[i][j],0);
                if(k>=3) {
                    if((k==3&&flag>=1)||(k==4&&flag>=2))
    //          如果长度==3,且转过1次向      或      如果长度==4,且转过2次向 , 跳出 
                        break;
                    else
                        ans++;
                }
    //            cout<<"\n";
    //            for(int i=1; i<=n; i++) {
    //                for(int j=1; j<=m; j++)
    //                    cout<<a[i][j];
    //                cout<<"\n";
    //            }
    //            cout<<ans<<endl; 
            }
    
    
        printf("%d",ans);
        return 0;
    }
    //4 5
    //1 1 2 8 8
    //1 5 5 8 8
    //7 0 5 5 9
    //7 7 0 9 9
    //1 
    //此代码能过这个点 
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月23日

悬赏问题

  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?