1 条题解
-
0
这么说吧,这是一道很有趣的诈骗题。
第一眼看题目其实挺唬人的,又是连通块又是数量的。
但冷静一下发现只有两行,又保证 输入只有一个连通块,那就非常好做了。
我们找形如下图的 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
- 上传者