• nyoj-204


    描述国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。

    比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。

    给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。

     
    输入
    第一行是一个整数N(N<=10)表示测试数据的组数) 每组测试数据占一行 只有一个字符串(长度小于100),由大写英文字母组成,表示最终的项链。
    输出
    每组测试数据的输出只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度。
    样例输入
    2
    ABBAABBA
    A
    样例输出
    2
    1
    #if 0
    //wa~
    #include <stdio.h>
    #include <string.h>
    #define M 101
    char s[M];
    
    int main()
    {
        int t, n, i, j, sum, min;
        scanf("%d", &t);
        while(t--){
    
                scanf("%s", s+1);
                n = strlen(s+1);
                min = 120;
                if(n == 1)
                {
                    printf("1
    ");
                }
                else
                {
                    while(n){
    
                            for(sum = 0, i = 1, j = n; s[i] == s[j]; i++, j--)
                            {
                                if(i >= j)/*循环到对称中心的位置结束*/
                                {
                                    break;
                                }
                                sum++;
                            }
                            if(sum != 0 && sum < min)
                            {
                                min = sum;
                            }
                            n /= 2;
    
                    }
                    if(min == 120)
                    {
                        min = strlen(s+1);
                    }
                    printf("%d
    ", min);
    
                }
    
        }
        return 0;
    }
    #endif
    
    #if 0
    //AC,最下面有个简化的
    #include <stdio.h>
    #include <string.h>
    #define M 101
    char s[M];
    
    int main()
    {
        int t, n, i, j, flag;
        scanf("%d", &t);
        while(t--){
    
                scanf("%s", s+1);
                n = strlen(s+1);
                flag = 0;
                while(n){
    
                        if(n == 1)
                        {
                            break;
                        }
                        if(n != 1 && n%2 != 0)
                        {
                            break;
                        }
                        for(i = 1, j = n; i < j; i++, j--){
    
                                if(s[i] != s[j])
                                {
                                    flag = 1;
                                    break;
                                }
    
                        }
                        if(flag == 1)
                        {
                            break;
                        }
                        n /= 2;                            
        
                }
                printf("%d
    ", n);
    
        }
        return 0;
    }
    #endif
    
    //我觉得上面的逻辑比较混乱,简化一下
    #include <stdio.h>
    #include <string.h>
    #define M 102
    char s[M];
    
    int main()
    {
        int t, len, i, j, flag;
        scanf("%d", &t);
        while(t--){
    
                scanf("%s", s+1);
                len = strlen(s+1);
                flag = 0;/*代表找到基本字符串的标志*/
                while(len % 2 == 0){
    
                        for(i = 1, j = len; i < j; i++, j--){
    
                                if(s[i] != s[j])
                                {
                                    flag = 1;
                                    break;
                                }
    
                        }
                        if(flag == 1)
                        {
                            break;
                        }
                        len /= 2;/*折半查找*/
                
                }
                printf("%d
    ", len);
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    ORA-65114
    Mariadb 10.14 mysqldump error: 1049
    nginx:403 forbidden
    ORA-01017
    oracle 12C 之 Clone 数据库
    Selinux的基本使用
    This system is not registered to Red Hat Subscription Management
    Emacs: too long for unix domain socket
    hive 之 元数据表结构(Mysql)
    hive之SerDe
  • 原文地址:https://www.cnblogs.com/the-one/p/3304840.html
Copyright © 2020-2023  润新知