void test36()
{
FILE* fi = freopen("data.in", "r", stdin);
FILE* fo = freopen("data.out", "w", stdout);
int Mater[]; //主齿轮
int Drive[]; //从齿轮
int ch,Min_Len,Max_Len;
int M_l, D_l;
int count = ;
while (!feof(fi))
{
memset(Mater, , sizeof(Mater));
memset(Drive, , sizeof(Drive));
M_l = D_l = 0; //M_l是记录主动轮长度,D_l记录从动轮长度//开始读取主动轮数据
while ((ch = getchar()) != '\n' && ch != EOF)
{
Mater[M_l++]=ch-'';
}
//开始读取从动轮数据
while ((ch = getchar()) != '\n' && ch != EOF) //EOF是-1 字符串结束是'\0'--0
{
Drive[D_l++] = ch - '';
}
//不能根据长度卡位
//从动轮开始从尾部与主动轮头部卡位,依次得出最小距离
Min_Len = Max_Len = D_l + M_l; //初始是两个没有卡位好 D_l+M_l是初值,每当卡位一个就在基础上减一
//从动轮开始右移
//开始卡位主动轮 从第一个开始到最右边全部出去
int i, j, flag;
for (i = 0; i < Max_Len; i++)
{
//向左验证
flag = 1;
for (j = 0; j <= i; j++)
{
if (Drive[D_l - 1 - j] + Mater[i - j]>3) //从动轮的右边开始向左进行验证,若是从动轮高度加上主动轮高度>3-->卡位失败
{
flag = 0;
break; //卡位失败,不向后进行验证了
}
}
if (flag) //卡位成功
{
if (j<=M_l) //从动轮在主动轮左侧
{
if (j >= D_l) //全部卡入,是最小
{
Min_Len = M_l;
break;
}
else //没有卡完,只有部分重合,还有一部分在外面未进入
if (Min_Len > Max_Len - j)
Min_Len = Max_Len - j;
}
else //从动轮在主动轮右侧
if (Min_Len > Max_Len - (D_l - i + M_l - 1))
Min_Len = Max_Len - (D_l - i + M_l - 1);
}
}
printf("%d\n", Min_Len);
}
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}