3 条题解

  • 1
    @ 2025-12-15 17:27:40
    #include<bits/stdc++.h>
    #define ll long long
    #define un unsigned
    #define int long long
    #define db double
    #define inf 1000000000000000
    #define st string
    #define ct const
    #define xh(a,b,c) for(int a=b;a<=c;a++)
    #define wx while(1)
    #define dn(a,b,c) for(int a=b;a>=c;a--)
    using namespace std;
    ll max(ll x,ll y){
       return x>y?x:y;
    }
    ll min(ll x,ll y){
       return x<y?x:y;
    }
    int n;
    char a[40][40];
    bool f[40][40];
    int ans;
    int tx[]={0,0,-1,1};
    int ty[]={1,-1,0,0};
    void dfs(int x,int y){
    	f[x][y]=1;
    	xh(i,0,3){
    		int X=x+tx[i],Y=y+ty[i];
    		if(!f[X][Y]&&a[X][Y]=='.')dfs(X,Y);
    	}
    }
    signed main(){
    	cin>>n;
    	xh(i,1,n)xh(j,1,n)cin>>a[i][j];
    	dfs(1,1);
    	xh(i,1,n){
    		xh(j,1,n){
    			if(!f[i][j])continue;
    			xh(i1,0,3){
    				int X=i+tx[i1],Y=j+ty[i1];
    				if(a[X][Y]=='#'||!X||X==n+1||!Y||Y==n+1)ans++;
    			}
    		}
    	}
    	cout<<(ans-4)*9;
    	return 0;
    }
    

    后记:楼下这位,不许ctj!!!!!

    • 0
      @ 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
        标签
        (无)
        递交数
        344
        已通过
        79
        上传者