UVa1588-Kickdown
思路:
这个题目的思路很好想到就是分别将两个字符串滑动比较他们重叠的每一位,如果有一位都是2则不行,如果这个重叠状态合法,就将这个状态的长度与当前最小值比较取小的那个。刚开始想怎么在一个循环里面把两边都给算上卡了很久发现很难搞,最后发现还是用两个循环分别比较好弄的多。
代码:
#include <bits/stdc++.h>
using namespace std;
string s,s2;
int cmp(string &s,string &s2,int p,int q,int n)
{
for(int i=0;i<n;i++)
{
if(s[p+i]+s2[q+i]>'2'+'1')
return 0;
}
return 1;
}
int main()
{
while(cin>>s>>s2)
{
int l=s.size(),l2=s2.size();
int minn=l+l2;
for(int i=0;i<l;i++)
if(cmp(s,s2,i,0,min(l-i,l2))) minn=min(max(i+l2,l),minn);
for(int i=0;i<l2;i++)
if(cmp(s2,s,i,0,min(l2-i,l))) minn=min(max(i+l,l2),minn);
cout<<minn<<endl;
}
return 0;
}