UVA - 1588 Kickdown
题目大意:给出两个长度不一定相同且每列高度为 1 或 2 的长条,将它们放入一个高度为 3 的容器,求最短容器长度。
解题思路:一个一个匹配 超过3的就不可以 然后左右移动上面的 取最小的
#include<iostream>
#include<cstring>
#include<cstdio>
int max(int x, int y) {
if (x >= y) return x;
else return y;
}
int min(int x, int y) {
if (x <= y) return x;
else return y;
}
int main () {
bool f;
char a[105],b[105];
while (scanf("%s%s", a, b) != EOF ) {
int la = strlen(a),lb = strlen(b),l = 0,ll = 0;
for (int i = 0; i < la ;i++,l++) {
f = 1;
for (int j = 0; j < lb && j + i < la; j++) {
if ( b[j] == '2' && a[i+j] == '2') {
f = 0;
break;
}
}
if (f) {
break;
}
}
l = max(la, lb + l);
for (int i = 0; i < lb; i++,ll++) {
f = 1;
for (int j = 0; j < la && j + i < lb; j++) {
if ( a[j] == '2' && b[i+j] == '2') {
f = 0;
break;
}
}
if (f) {
break;
}
}
ll = max(lb ,la + ll);
printf("%d\n", min(ll,l));
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
}
}