uva1588 Kickdow

题目很水 但我更水 好久没做题 水了很久。。。。
题意:给出两个长度分别为n1,n2且每列高度只为1,或者2的长条,需要将它们放入一个高度最高为3的容器,问容器的最短长度。
思路:分别以其中一个为标准不动,另一个移动去扫它,不满足就右移一位,求满足条件最小长度,n^2的复杂度,但要扫两次(第一个不动,第二个不动)。开始想错了,想当然认为长的不动用短的去扫它就是答案,忽略这两种情况不同,比如数据:2222 211.
还有注意 ‘1’+‘2’!=‘3’

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    char a[1100],b[1100];
    while(cin>>a>>b)
  {
        int n=strlen(a);
        int m=strlen(b);
        int len=max(n,m);
        int flag=0,index;
        for(int i=0;i<=n;i++)
        {
            for(int j=0;j<m;j++)
            {
              if(a[i+j]+b[j]>'1'+'2')
                 break;
               if(j==m-1)
              {
                 flag=1;
                 break;
              }
            }
            if(flag||i==n)
            {
                index=i;
                break;
            }
         }
        int len1=index+m;
        flag=0;
        for(int i=0;i<=m;i++)
        {
            for(int j=0;j<n;j++)
            {

              if(a[j]+b[i+j]>'1'+'2')
                 break;
               if(j==n-1)
              {
                 flag=1;
                 break;
              }
            }
              if(flag||i==m)
            {
                index=i;
                break;
            }
         }
      int len2=index+n;
      cout<<max(len,min(len1,len2))<<endl;
      memset(a,0,sizeof(a));
      memset(b,0,sizeof(b));
     }
  return 0;
}

你可能感兴趣的:(uva1588 Kickdow)