题目大意:给出两个长度不一定相同且每列高度为 1 或 2 的长条,将它们放入一个高度为 3 的容器,求最短容器长度。
解题思路:想到字符串匹配,其中一个长条不动,另一个移动去匹配,高度为 3 则不能同时为 2。这里要考虑的是移动有两个方向,模拟为两种情况:上面的移动下面的不动,即上面的右移;上面的不动下面的动,即上面的左移。取两种中较短的。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[105],b[105];
int main() {
while(scanf("%s%s", a, b) != EOF) {
int tot_a = 0,tot_b = 0, i, j;
int len_a = strlen(a),len_b = strlen(b);
for (i = 0; i < len_a ; i++) {
int tag = 1;
for (j = 0; j < len_b && i+j < len_a; j++)
if (a[i+j] == '2' && b[j] == '2') {
tag = 0; break;
}
if (tag) break;
}
tot_a = max(len_a, len_b + i);
for (i = 0; i < len_b; i++) {
int tag = 1;
for (j = 0; j < len_a && i+j < len_b; j++)
if (b[i+j] == '2' && a[j] == '2') {
tag = 0; break;
}
if (tag) break;
}
tot_b = max(len_a + i, len_b);
printf("%d\n", min(tot_a, tot_b));
memset (a, 0, sizeof(a));
memset (b, 0, sizeof(b));
}
return 0;
}