2018-10-30-18:27:03
原题链接
题目描述:
给出两个长度分别为n1,n2且每列高度只为1或2的长条,需要将它们放入一个高度为3的容器,求出能够容纳他们的最短容器长度。
本题思路:
模拟插入,从第一个接口开始插,如果不满足条件就跳到下一个接口,满足条件时跳出函数输出答案即可。
本题注意点:
第一次提交时没有考虑到插和被插顺序不一样导致结果不一。特殊数据2222 211112。
本题感悟:
遇到题目一定要多方位考虑,考虑到就去实现,不要根据经验主观臆断。
AC代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 #define max 3 6 7 int link(string s1,string s2){ 8 bool flag=false; 9 int len1=s1.size(),len2=s2.size(); 10 int i,j; 11 for(i=0;i<=len2;i++){ 12 int index=i; 13 if(!flag) 14 for(j=0;j<len1;j++){ 15 if(s1[j]+s2[index]-2*'0'>max) 16 break; 17 if(index==len2-1||j==len1-1){ 18 flag=true; 19 break; 20 } 21 index++; 22 } 23 else 24 break; 25 } 26 return i+len1-1>len2?i+len1-1:len2; 27 }//s1插s2 28 29 int main() 30 { 31 string s1,s2; 32 while(cin>>s1>>s2){ 33 cout<<min(link(s1,s2),link(s2,s1))<<endl; 34 } 35 return 0; 36 }