您的位置:首页 > 其它

UVA - 1588 Kickdown

2016-07-04 18:00 316 查看
题目大意:给出两个长度不一定相同且每列高度为 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva