# 解体思路:
按顺序s1s2s3逐个逐字符个比较,如果字符相同就赋值,不同的话指针就重置,重新寻找,赋值中如果长度超过原先字符就在字符后补齐。s1s2合并完后再用合并后新的字符串和s3进行比较,最后再输出现在字符的长度。
此算法依赖于输入顺序,输入顺序不同会影响结果,所以本人将所有的输入顺序都进行模拟,即(s1s2s3,s1s3s2,s2s1s3,s2s3s1,s3s2s1,s3s1s2)
再将每种情况得到的长度比较,输出最小的那个值。
### 本地自创所有数据点都手动测试均符合题意,
可洛谷就是不给过QAQ。菜鸡看不出问题不会修改了........
dalao门救命啊QAQ
#include<bits/stdc++.h>
using namespace std;
string s1;
string s2;
string s3;
string s1s;
string s2s;
string s3s;
int main()
{
cin>>s1>>s2>>s3;
s1s = s1;
s2s = s2;
s3s = s3;
s1 = s1s;
s2 = s2s;
s3 = s3s;
long long l1 = s1.length();
long long l2 = s2.length();
long long l3 = s3.length();
long long x = 0;
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s2[x])
{
s1[i] = s2[x];
x++;
}
else if(i>=l1)
{
s1+=s2[x];
x++;
}
else
{
x=0;
}
if(x>=l2)break;
}
x = 0;
l1 = s1.length();
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s3[x])
{
s1[i] = s3[x];
x++;
}
else if(i>=l1)
{
s1+=s3[x];
x++;
}
else
{
x=0;
}
if(x>=l3)break;
}
long long ans_s1s2s3 = s1.length();
s1 = s1s;
s2 = s3s;
s3 = s2s;
l1 = s1.length();
l2 = s2.length();
l3 = s3.length();
x = 0;
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s2[x])
{
s1[i] = s2[x];
x++;
}
else if(i>=l1)
{
s1+=s2[x];
x++;
}
else
{
x=0;
}
if(x>=l2)break;
}
x = 0;
l1 = s1.length();
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s3[x])
{
s1[i] = s3[x];
x++;
}
else if(i>=l1)
{
s1+=s3[x];
x++;
}
else
{
x=0;
}
if(x>=l3)break;
}
long long ans_s1s3s2 = s1.length();
s1 = s2s;
s2 = s1s;
s3 = s3s;
l1 = s1.length();
l2 = s2.length();
l3 = s3.length();
x = 0;
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s2[x])
{
s1[i] = s2[x];
x++;
}
else if(i>=l1)
{
s1+=s2[x];
x++;
}
else
{
x=0;
}
if(x>=l2)break;
}
x = 0;
l1 = s1.length();
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s3[x])
{
s1[i] = s3[x];
x++;
}
else if(i>=l1)
{
s1+=s3[x];
x++;
}
else
{
x=0;
}
if(x>=l3)break;
}
long long ans_s2s1s3 = s1.length();
s1 = s2s;
s2 = s3s;
s3 = s1s;
l1 = s1.length();
l2 = s2.length();
l3 = s3.length();
x = 0;
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s2[x])
{
s1[i] = s2[x];
x++;
}
else if(i>=l1)
{
s1+=s2[x];
x++;
}
else
{
x=0;
}
if(x>=l2)break;
}
x = 0;
l1 = s1.length();
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s3[x])
{
s1[i] = s3[x];
x++;
}
else if(i>=l1)
{
s1+=s3[x];
x++;
}
else
{
x=0;
}
if(x>=l3)break;
}
long long ans_s2s3s1 = s1.length();
s1 = s3s;
s2 = s2s;
s3 = s1s;
l1 = s1.length();
l2 = s2.length();
l3 = s3.length();
x = 0;
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s2[x])
{
s1[i] = s2[x];
x++;
}
else if(i>=l1)
{
s1+=s2[x];
x++;
}
else
{
x=0;
}
if(x>=l2)break;
}
x = 0;
l1 = s1.length();
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s3[x])
{
s1[i] = s3[x];
x++;
}
else if(i>=l1)
{
s1+=s3[x];
x++;
}
else
{
x=0;
}
if(x>=l3)break;
}
long long ans_s3s2s1 = s1.length();
s1 = s3s;
s2 = s1s;
s3 = s2s;
l1 = s1.length();
l2 = s2.length();
l3 = s3.length();
x = 0;
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s2[x])
{
s1[i] = s2[x];
x++;
}
else if(i>=l1)
{
s1+=s2[x];
x++;
}
else
{
x=0;
}
if(x>=l2)break;
}
x = 0;
l1 = s1.length();
for(long long i=0;i>=-1;i++)
{
if(s1[i] == s3[x])
{
s1[i] = s3[x];
x++;
}
else if(i>=l1)
{
s1+=s3[x];
x++;
}
else
{
x=0;
}
if(x>=l3)break;
}
long long ans_s3s1s2 = s1.length(); cout<<min(ans_s3s1s2,min(ans_s3s2s1,min(ans_s2s3s1,min(ans_s2s1s3,min(ans_s1s2s3,ans_s1s3s2)))));
system("pause");
return 0;
}