UVA 1588

来源:互联网 发布:mac重装系统无法验证 编辑:程序博客网 时间:2024/06/11 08:12

题目大意:上下两个板,由字符串组成,’1‘为平,’2‘为凸,只要不是两个凸相对就可以镶在一起。问两个板平拼在一起需要最短多长。板不能转。

解题思路:分三种情况定位两个板的位置,往后走,第一种,内镶,第二种,短板从左进入,第三种短板从右进入。循环判断。最短为长板的长度,最长为两板相加。

ac代码:

#include <iostream>#include <cstring>using namespace std;int n, len1, len2, sum, jud, temp;char a[1005], b[1005];void swap(){char c[105];int temp;strcpy(c, a), strcpy(a, b);strcpy(b, c), temp = len1;len1 = len2, len2=  temp;}int main(){while (scanf("%s%s", a, b)!=EOF){len1 = strlen(a), len2 = strlen(b);sum = len1 + len2;if (len1 < len2)swap();for (int i=0; i<=len1-len2; i++){jud = 1;for (int j=0,k=i; j<len2; j++,k++)if (a[k] + b[j] - '0' > '3'){jud = 0;break;}if (jud)sum = len1;}for (int i=1; i<len2; i++){jud = 1;for (int j=len2-i,k=0; j<len2; j++,k++)if (a[k] + b[j] - '0' > '3'){jud = 0;break;}if (jud){temp = len1 + len2 - i;if (sum > temp)sum = temp;}jud = 1;for (int j=0,k=len1-i; k<len1; j++,k++)if (a[k] + b[j] - '0' > '3'){jud = 0;break;}if (jud){temp = len1 + len2 - i;if (sum > temp)sum = temp;}}printf("%d\n", sum);}return 0;}