https://vjudge.net/problem/UVA-1588
Kickdown UVA - 1588
一块一块区域的枚举匹配
保留下符合匹配的最小值
就是一点点的挪下去
#include<iostream>
#include<string>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <cstdio>
using namespace std;
int d[100000],p[100000];
int main()
{
string a,b;
while(cin>>a>>b)
{
if(strlen(&a[0])>strlen(&b[0])) swap(a,b);
int j;
int z=1;
int mins=1000000;
int l=strlen(&a[0]),r=strlen(&b[0]);
for(int i=strlen(&a[0]);i>=0;i--)//a的末尾开始匹配b的开头
{
j=0;
int k=i;
int z=1;
while(k<strlen(&a[0]))
{
int x=a[k]-48;
int y=b[j]-48;
if(x+y>3)
{
z=0;
break;
}
k++;
j++;
}
//cout<<i<<' '<<r<<' '<<z<<endl;
if(z) mins=min(mins,i+r);
}
//cout<<mins<<endl;
z=1;
for(int i=0;b[i];i++)//a的开头 开始匹配b的每个区域
{
for(j=0;a[j];j++)
{
int x=b[i+j]-48;
int y=a[j]-48;
if(x+y>3) break;
}
if(!a[j])
{
z=0;
mins=min(mins,i+l);
break;
}
}
cout<<max(mins,r)<<endl;
}
}