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:

AB

输入样例2:

ABCDEFGHIJKLMN

输出样例2:

ABCDEFGHIJKLMN

思路:

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

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

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


代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BraumAce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值