Uva 1588 - Kickdown
题意:
给出两个长度分别为n1,n2(n1,n2<=100)且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器。
问能够容纳它们的最短容器长度。
固定其中一个,另一个在其上移动,找最小长度。
由于可以选择哪个固定,故算两次取最小值。
例如:
2112112112
2212112
把上面的固定,则为10;下面的固定,则最小需12。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cctype> 8 #include<vector> 9 #include<queue> 10 #include<map> 11 #include<set> 12 #define eps 10e-6 13 14 using namespace std; 15 16 typedef long long ll; 17 18 char a[105],b[105]; 19 20 int main() 21 { 22 while(~scanf("%s%s",a,b)) 23 { 24 int len1 = strlen(a),len2 = strlen(b); 25 int i=0,j=0,ans; 26 while(i<len1 && j<len2) 27 { 28 if(a[i]-'0'+b[j]-'0'<=3) 29 { 30 i++; 31 j++; 32 } 33 else 34 { 35 i = i-j+1; 36 j = 0; 37 } 38 } 39 ans = len1+len2-j; 40 i=0,j=0; 41 while(i<len1 && j<len2) 42 { 43 if(a[i]-'0'+b[j]-'0'<=3) 44 { 45 i++; 46 j++; 47 } 48 else 49 { 50 j = j-i+1; 51 i = 0; 52 } 53 } 54 printf("%d\n",min(ans,len2+len1-i)); 55 } 56 return 0; 57 }