http://acm.hust.edu.cn/vjudge/contest/123670#problem/Q 密码5201
![]()
![]()

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
char l[65535],s[65535];
while(scanf("%s%s",l,s)!=EOF)
{
int lenl=strlen(l),lens=strlen(s);
if(lenl<lens)
{
char t[65535];
strcpy(t,l);strcpy(l,s);strcpy(s,t);
swap(lenl,lens);
}
int i,j,mx=0;
for(i=0;i<lenl;i++)
{
for(j=0;lens-1-j>=0&&i-j>=0;j++)
{
if(s[lens-1-j]+l[i-j]-2*'0'>3) break;
}
if(lens-1-j>=0&&i-j>=0) continue;
int t=min(lens,i+1);
mx=max(mx,t);
}
for(i=lenl-lens;i<lenl;i++)
{
for(j=0;j<lens&&i+j<lenl;j++)
{
if(s[j]+l[i+j]-2*'0'>3) break;
}
if(j<lens&&i+j<lenl) continue;
int t=min(lens,lenl-i);
mx=max(mx,t);
}
int ans=lenl+lens-mx;
printf("%d\n",ans);
}
}
思路:
1. 从左往右开始对齐,只要相加小于二就可以。
2.记录重复的最大部分。
3.不要翻转字符串。