题目很水 但我更水 好久没做题 水了很久。。。。
题意:给出两个长度分别为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;
}