UVa 1588 Kickdown

题意:给出两个长度分别为n1,n2且每列高度只为1,或者2的长条,需要将它们放入一个高度为3的容器,问容器的最短长度。

分别以s,为标准,平移,得出一个长度l1,

再以t为标准,得出一个长度l2,

取len=min(len1,len2),再取len=max(max(n1,n2),len)(因为还是要覆盖住更长的那根长条)

 1 #include<iostream>  

 2 #include<cstdio>  

 3 #include<cstring> 

 4 #include <cmath> 

 5 #include<stack>

 6 #include<vector>

 7 #include<map> 

 8 #include<queue> 

 9 #include<algorithm>  

10 #define mod=1e9+7;

11 using namespace std;

12 

13 typedef long long LL;

14 const int maxn=10005;

15 char s[maxn],t[maxn];

16 

17 int main(){

18     int i,j,ans,len1,len2,len,flag,tt;

19     while(cin>>s>>t){

20         len1=strlen(s);

21         len2=strlen(t);

22         len=max(len1,len2);

23         

24         for(i=0;i<len1;i++) {//s动,t不动 

25             for(j=0;j<len2;j++){

26                 int a=s[j+i]-'0';

27                 int b=t[j]-'0';

28                 if(a+b>3) break;

29             }

30             

31             if(j==len2) break;

32         }

33         

34         int x=len2+i;

35         

36         for(i=0;i<len2;i++) {//t动,s不动 

37             for(j=0;j<len1;j++){

38                 int a=s[j]-'0';

39                 int b=t[j+i]-'0';

40                 if(a+b>3) break;

41             }

42             

43             if(j==len1) break;

44         }

45         int y=len1+i;

46         

47         len=max(len,min(x,y)); 

48         printf("%d\n",len);

49                 

50         memset(s,0,sizeof(s));

51         memset(t,0,sizeof(t));

52     }

53     return 0;    

54 }
View Code

 自己做错的原因是:只考虑到以一个为标准,另一个来移动,少考虑了一种情况

你可能感兴趣的:(uva)