题意:题意:给出两个长度分别为n1,n2且每列高度只为1,或者2的长条,需要将它们放入一个高度最高为3的容器,问容器的最短长度。
思路:我先定一个,一个移动,第一次求出len1,第二次求出len2,然后选择最小值。博主第一次天真以为只要定长的就行
2222 211这这个例子就是bug。
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int main(){
//freopen("data.in","r",stdin);
while(cin>>s1>>s2){
//cout<<s1<<endl<<s2<<endl;
if(s1.size()<s2.size()){
swap(s1,s2);
}
int pos,ok=0;
for(int i=0;i<s1.size();i++){
pos=i;ok=0;
for(int j=0,l=i;j<s2.size();){
//cout<<s1[l]+s2[j]<<endl;
if(s1[l]+s2[j]<=99){
l++;j++;
//cout<<l<<endl;
if(j>=s2.size()||l>=s1.size())
{
ok=1;
break;
}
}else{
break;
}
}
if(ok==1)
break;
}
if(pos==s1.size()-1&&s2[0]+s1[pos]>99)
pos++;
//cout<<pos<<endl;
int len1=max(pos+s2.size(),s1.size());
for(int i=0;i<s2.size();i++){
pos=i;ok=0;
for(int j=0,l=i;j<s1.size();){
//cout<<s1[l]+s2[j]<<endl;
if(s2[l]+s1[j]<=99){
l++;j++;
//cout<<l<<endl;
if(j>=s1.size()||l>=s2.size())
{
ok=1;
break;
}
}else{
break;
}
}
if(ok==1)
break;
}
//cout<<pos<<endl;
if(pos==s2.size()-1&&s2[pos]+s1[0]>99)
pos++;
int len2=pos+s1.size();
int ans=min(len1,len2);
cout<<ans<<endl;
}
return 0;
}