• PTA 7-20 xrf的镜子碎了?


    PTA 7-20 xrf的镜子碎了?


    题目描述:

    ​xrf有一面镜子,可以把任何接触镜面的东西变成原来的两倍,同时呢,那增加的那部分是反的。
    xrf很喜欢他的镜子,但是因为一股神秘力量(可能来自pltdhll),xrf的镜子碎了!xrf很伤心。

    lyx知道后想要把自己的镜子送给xrf,(lyx的镜子有一个独属于lyx的名字,叫做“lyx的镜子”)。而lyx的镜子虽然可以把接触镜面的东西变成原来的两倍,但增加的那部分是相同的。

    lyx为了展示他的镜子,不知道从哪拿来了一串珍珠项链。我们把项链用AB来表示,不同的字母表示不同颜色的珍珠。如果把A端接触镜面的话,镜子会把这条项链变成 ABAB ;如果再用B端接触的话,则会变成 ABABABAB ,即不论用哪端接触增加的部分都是相同的。

    xrf收到镜子后迫不及待的想要试一下,于是想拿出随身带的珍珠项链,可是不知道珍珠项链哪去了,只好重新找了一条珍珠项链测试了。

    xrf始终只用项链的一端接触镜子,经过多次与镜子接触最终得到了一条新的项链,xrf觉得这面镜子很有意思,但是忘了最初的项链长什么样了,只记得最初始的项链是不可能与lyx的镜子接触过。现在xrf把这个新的项链给你,请你帮他找出原来项链的形状。

    注:

    xrf给你的项链可能没有接触过lyx的镜子(可能是因为xrf很幽默\斜眼笑)。

    若项链为ABAB,则我们认为该项链可能与lyx的镜子接触过。

    若项链为AB,则我们认为该项链不可能与lyx的镜子接触过。

    输入格式:

    一个由大写英文字母(A~Z)组成的字符串(长度不超过100000),表示xrf给你的项链。

    输出格式:

    一个字符串,表示项链的形状。

    输入样例1:

    ABABABAB
    
    • 1

    输出样例1:

    AB
    
    • 1

    输入样例2:

    ABCDEFGHIJKLMN
    
    • 1

    输出样例2:

    ABCDEFGHIJKLMN
    
    • 1

    思路:

    基于贪心的思维,虽然项链接触镜子后长度会变成原来的两倍,但增加的那部分是相同的。

    所以可以得到一个结论:如果项链与镜子接触过,那么项链的长度必然是 2 的整数倍。

    于是我们可以先判断项链长度是否能被2整除,如果不能,那么现在的项链就是原来的项链;如果能被整除,再将现在的项链均分为两半,比较两部分,如果这两部分相同,再继续均分后比较 …,直至出现不同,那么这部分就是原来的项链形状。


    代码如下:

    #include 
    #include 
    #include 
    using namespace std;
    
    int main()
    {
        string a, b;
        cin >> a;
        int len = a.size();
        int cnt = 0;
        
        if (a.size() % 2 == 0){
            while (len){
                if (a.substr(0, (len/2)) == a.substr(len/2)){
                    a = a.substr(0, len/2);
                    len /= 2;
                }
                else {
                    cnt = len;
                    break;
                }
            }
        }
        else {
            cnt = len;
        }
        
       for (int i = 0; i < cnt; i++)
           cout << a[i];
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

  • 相关阅读:
    UE TransformVector 学习笔记
    数据库面试题+sql语句解析
    huawei services HK华为云服务
    P1017 [NOIP2000 提高组] 进制转换
    【TCP:可靠数据传输,快速重传,流量控制,TCP流量控制】
    用户登录管理中的Bug修复与技术思考
    HashMap&ConcurrentHashMap
    【JavaEE进阶系列 | 从小白到工程师】JavaEE中的面向对象之多态,长文解析使用
    fcntl函数 非阻塞轮询
    如何正确的清理C盘
  • 原文地址:https://blog.csdn.net/qq_59904473/article/details/126545000