2 条题解

  • 2
    @ 2025-1-4 14:25:49
    //今天不吃蛆 吃tj!!!
    #include<bits/stdc++.h>
    #define f(i,l,r) for(int i=l;i<=r;i++)
    #define fx(i,l,r) for(int i=l;i<r;i++)
    using namespace std;
    int n;
    char a[105][105];
    bool b[105][105],c[105][105],d[105][105];
    int ans;
    bool yuejie(int x,int y){
    	if(x>=0&&x<=n&&y>=0&&y<=n) return 1;
    	return 0;
    }
    void dfs(int x,int y){
    	if(b[x][y]||!yuejie(x,y)) return;
    	b[x][y]=1;
    	if(a[x][y]=='#'){
    		c[x][y]=1;return;
    	}
    	dfs(x-1,y);dfs(x,y-1);
    	dfs(x,y+1);dfs(x+1,y);
    	return;
    }
    void z(int x,int y){
    	if(yuejie(x-1,y)&&a[x-1][y]=='.'&&b[x-1][y]) ans++;
    	if(yuejie(x,y-1)&&a[x][y-1]=='.'&&b[x][y-1]) ans++;
    	if(yuejie(x,y+1)&&a[x][y+1]=='.'&&b[x][y+1]) ans++;
    	if(yuejie(x+1,y)&&a[x+1][y]=='.'&&b[x+1][y]) ans++;
    	return;
    }
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);cout.tie(0);
    	cin>>n;
    	f(i,1,n){
    		cin>>a[i];
    		for(int j=n;j>=1;j--){
    			a[i][j]=a[i][j-1];
    		}
    		a[i][0]=' ';
    	}
    	f(i,2,n+1){
    		a[i][0]='#';
    	}
    	f(i,0,n-1){
    		a[i][n+1]='#';
    	}
    	f(j,1,n){
    		if(j!=1) a[0][j]='#';
    		if(j!=n) a[n+1][j]='#';
    	}
    	n++;
    	dfs(1,1);dfs(n,n);
    	f(i,0,n){
    		f(j,0,n){
    			if(c[i][j]==1) z(i,j);
    		}
    	}
    	cout<<ans*9;
    }
    
    • 1
      @ 2025-1-4 12:32:26
      //搜一下终点和终点,dfs即可
      #include<bits/stdc++.h>
      #define f(i,l,r) for(int i=l;i<=r;i++)
      #define fx(i,l,r) for(int i=l;i<r;i++)
      using namespace std;
      int n;
      char a[105][105];
      bool b[105][105],c[105][105],d[105][105];
      int ans;
      bool yuejie(int x,int y){
      	if(x>=0&&x<=n&&y>=0&&y<=n) return 1;
      	return 0;
      }
      void dfs(int x,int y){
      	if(b[x][y]||!yuejie(x,y)) return;
      	b[x][y]=1;
      	if(a[x][y]=='#'){
      		c[x][y]=1;return;
      	}
      	dfs(x-1,y);dfs(x,y-1);
      	dfs(x,y+1);dfs(x+1,y);
      	return;
      }
      void z(int x,int y){
      	if(yuejie(x-1,y)&&a[x-1][y]=='.'&&b[x-1][y]) ans++;
      	if(yuejie(x,y-1)&&a[x][y-1]=='.'&&b[x][y-1]) ans++;
      	if(yuejie(x,y+1)&&a[x][y+1]=='.'&&b[x][y+1]) ans++;
      	if(yuejie(x+1,y)&&a[x+1][y]=='.'&&b[x+1][y]) ans++;
      	return;
      }
      int main(){
      	ios::sync_with_stdio(0);
      	cin.tie(0);cout.tie(0);
      	cin>>n;
      	f(i,1,n){
      		cin>>a[i];
      		for(int j=n;j>=1;j--){
      			a[i][j]=a[i][j-1];
      		}
      		a[i][0]=' ';
      	}
      	f(i,2,n+1){
      		a[i][0]='#';
      	}
      	f(i,0,n-1){
      		a[i][n+1]='#';
      	}
      	f(j,1,n){
      		if(j!=1) a[0][j]='#';
      		if(j!=n) a[n+1][j]='#';
      	}
      	/*f(i,0,n+1){
      		f(j,0,n+1){
      			cout<<a[i][j];
      		}
      		cout<<endl;
      	}*/
      	n++;
      	dfs(1,1);dfs(n,n);
      	f(i,0,n){
      		f(j,0,n){
      			if(c[i][j]==1) z(i,j);
      		}
      	}
      	cout<<ans*9;
      	return 0;
      }
      
      • 1

      信息

      ID
      246
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      (无)
      递交数
      306
      已通过
      76
      上传者