题意:题意:给出两个长度分别为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; }