题目描述小明需要在一条 2×n 的河床上铺设水质检测器。在他铺设之前河床上已经存在一些检测器。如果两个检测器上下或者左右相邻那么这两个检测器就是互相连通的。连通具有传递性即如果 A 和 B 连通B 和 C 连通那么 A 和 C 也连通。现在他需要在河床上增加铺设一些检测器使得所有的检测器都互相连通。他想知道最少需要增加铺设多少个检测器输入格式输入共两行表示一个 2×n 的河床。每行一个长度为 n 的字符串仅包含#和.其中#表示已经存在的检测器.表示空白。输出格式输出共 1 行一个整数表示答案。35分代码#include iostream using namespace std; #define int long long const int N 1e6; int lka[N]; int ans 0, frs 0, las 0; signed main() { // 请在此输入您的代码 string a,b; cin a b; int suma 0, sumb 0; for(int i 0; i a.length(); i ) { if(a[i] #) suma ; if(b[i] #) sumb ; if(a[i] # || b[i] #) { frs i; break; } } // cout frs frs; for(int i a.length(); i 0; i -- ){ if(a[i] # || b[i] #) { las i; break; } } // cout las las ; for(int i frs; i las; i ) { if(a[i] . b[i] .) { if(suma sumb) a[i] #; else b[i] #; ans ; } } // cout ans ams; int k 0; for(int i frs; i las; i ) { if(a[i] ! a[i1]) lka[k] i; } // cout k k; k--; int p0; for(int i lka[p]; p k; p) { if(a[i] # a[i1] # b[i] . b[i1].) ans ; if(a[i] # a[i1] . b[i] . b[i1]#) ans ; if(a[i] . a[i1] # b[i] # b[i1].) { ans; b[i1] #; } if(a[i] . a[i1] . b[i] # b[i1]#) ans ; } cout ans; return 0; }
思维题(不能考虑全)蓝桥
发布时间:2026/5/23 10:29:12
题目描述小明需要在一条 2×n 的河床上铺设水质检测器。在他铺设之前河床上已经存在一些检测器。如果两个检测器上下或者左右相邻那么这两个检测器就是互相连通的。连通具有传递性即如果 A 和 B 连通B 和 C 连通那么 A 和 C 也连通。现在他需要在河床上增加铺设一些检测器使得所有的检测器都互相连通。他想知道最少需要增加铺设多少个检测器输入格式输入共两行表示一个 2×n 的河床。每行一个长度为 n 的字符串仅包含#和.其中#表示已经存在的检测器.表示空白。输出格式输出共 1 行一个整数表示答案。35分代码#include iostream using namespace std; #define int long long const int N 1e6; int lka[N]; int ans 0, frs 0, las 0; signed main() { // 请在此输入您的代码 string a,b; cin a b; int suma 0, sumb 0; for(int i 0; i a.length(); i ) { if(a[i] #) suma ; if(b[i] #) sumb ; if(a[i] # || b[i] #) { frs i; break; } } // cout frs frs; for(int i a.length(); i 0; i -- ){ if(a[i] # || b[i] #) { las i; break; } } // cout las las ; for(int i frs; i las; i ) { if(a[i] . b[i] .) { if(suma sumb) a[i] #; else b[i] #; ans ; } } // cout ans ams; int k 0; for(int i frs; i las; i ) { if(a[i] ! a[i1]) lka[k] i; } // cout k k; k--; int p0; for(int i lka[p]; p k; p) { if(a[i] # a[i1] # b[i] . b[i1].) ans ; if(a[i] # a[i1] . b[i] . b[i1]#) ans ; if(a[i] . a[i1] # b[i] # b[i1].) { ans; b[i1] #; } if(a[i] . a[i1] . b[i] # b[i1]#) ans ; } cout ans; return 0; }