UVA - 1588 Kickdown

来源:互联网 发布:淘宝直通车养词要多久? 编辑:程序博客网 时间:2024/05/20 05:31

题目大意:给出两个长度不一定相同且每列高度为 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;}
0 0