求助!!长度一万都可以过,两万就过不了了
  • 板块CF25E Test
  • 楼主lengty
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/21 22:37
  • 上次更新2023/11/22 13:39:48
查看原帖
求助!!长度一万都可以过,两万就过不了了
1010751
lengty楼主2023/11/21 22:37
# 解体思路:
按顺序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()
{
    //freopen("C:\\Users\\ty536\\Desktop\\int.txt","r",stdin);
    //freopen("C:\\Users\\ty536\\Desktop\\out.txt","w",stdout);
    cin>>s1>>s2>>s3;
    s1s = s1;
    s2s = s2;
    s3s = s3;

    //s1s2s3
    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();
//s1s3s2
    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();
//s2s1s3
    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();
    //s2s3s1
    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();
    //s3s2s1
    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();
    //s3s1s2
    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;
}
2023/11/21 22:37
加载中...