1 条题解

  • 0
    @ 2026-5-5 17:29:40

    这么说吧,这是一道很有趣的诈骗题。

    第一眼看题目其实挺唬人的,又是连通块又是数量的。

    但冷静一下发现只有两行,又保证 输入只有一个连通块,那就非常好做了。

    我们找形如下图的 2×3 区域:

    显然,此时将 A 块染成黑色可以使该局部变成三个连通块。由于保证输入只有一个连通块,那么整个图都会被划分为三个连通块(想象一下左边和右边都是白色块)。

    同时,除了这种填充方案以外不存在其它填充方法能满足题目要求。比较显然,这里不再赘述。

    当然了,将上图上下颠倒所得到的图形也是满足条件的。

    放代码:

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    char a[200005][5];
    signed main(){
    	int t;
    	cin>>t;
    	while(t--){
    		int n;
    		cin>>n;
    		for(int i=1;i<=2;i++){
    			for(int j=1;j<=n;j++){
    				cin>>a[j][i];
    			}
    		}
    		int ans=0;
    		for(int i=2;i<n;i++){
    			if(a[i][1]=='.'){
    				if(a[i][2]=='.'&&a[i-1][2]=='x'&&a[i+1][2]=='x'&&a[i-1][1]=='.'&&a[i+1][1]=='.'){
    					ans++;
    				}
    			}
    		}
    		for(int i=2;i<n;i++){
    			if(a[i][2]=='.'){
    				if(a[i-1][1]=='x'&&a[i+1][1]=='x'&&a[i][1]=='.'&&a[i-1][2]=='.'&&a[i+1][2]=='.'){
    					ans++;
    				}
    			}
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    6929
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者