写T了,按照我这思路应该怎么优化?
  • 板块学术版
  • 楼主jor蛋
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/10/2 10:26
  • 上次更新2023/11/4 05:10:58
查看原帖
写T了,按照我这思路应该怎么优化?
72921
jor蛋楼主2021/10/2 10:26

题目:四面楚歌

#include<iostream>
#include<string.h>
#include<string>

using namespace std;

int a[1005][1005],f[]={2,3,0,1},m;
int find(int x,int y,int _d){
    int d=0,p,i,j,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
    while(d<4){
        if(a[x][y]==2) return 1;
        if(a[x+dx[d]][y+dy[d]]!=1&&d!=_d){
            i=x;j=y;
            x=x+dx[d];y=y+dy[d];
            m=f[d];
            p=find(x,y,m);
            if(p==1)    return 1;
            else{x=i;y=j;d++;}
        }else d++;
    }
    return 0;
}
int get(int x,int y){
    int d=0,dx[]={0,1,0,-1},dy[]={1,0,-1,0},p,i,j;
    while(d<4){
        if(a[x][y]==2) return 1;
        if(a[x+dx[d]][y+dy[d]]!=1){
            i=x;j=y;
            x=x+dx[d];y=y+dy[d];
            m=f[d];
            p=find(x,y,m);
            if(p==1) return 1;
            else{x=i;y=j;d++;}
        }else d++;
    }
    return 0;
}
int main(){
    int i,j,n,m,sum=0;
    
    cin>>n>>m;
    memset(a,2,sizeof(a));
    for(i=1;i<=n;i++){
        string s;
        cin>>s;
        for(j=0;j<s.size();j++){
            if(s[j]=='.') a[i][j+1]=3;
            else a[i][j+1]=s[j]-'0';
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(a[i][j]==0) sum+=get(i,j);
        }
    }
    cout<<sum<<endl;
    return 0;
}
2021/10/2 10:26
加载中...