zoukankan      html  css  js  c++  java
  • 【搜索】Shuffle'm Up

    运用第i个s12和第i+1个s12中,每个位置具有的确定的映射关系:

            pos = pos * 2 + 1 (pos < c)

            pos = pos * 2 - c * 2 (pos >= c)

            例如c =3, 则位置为 0 1 2 3 4 5  会映射成 3 0 4 1 5 2

            从第1到第2c个位置依次进行匹配,用搜索应该也可以做,合适于数据大的情况。

    #include<string.h>
    #include<stdio.h>
    
    
    int main(){
        int n, c;
        char s1[105], s2[105], s12[210], des[210];
        scanf("%d",&n);
        //cin >> n;
        for(int t = 1; t <= n; t ++){
            scanf("%d %c %c %c",c,s1,s2,des);
            int ans = 0;
            bool flag = false;
            char str1[105];
            strcpy(str1, s1);  // str1保存原始状态的s1。
    
            while(!flag){
                int i, k = 0;
                for(i = 0; i < c; i ++){   // s1和s2按规则合成s12。
                    s12[k ++] = s2[i];
                    s12[k ++] = s1[i];
                }
                s12[k] = 0; 
                ans ++;
                if(!strcmp(s12, des)){   // 若s12与目标相同。
                    flag = true;
                    break;
                }
                for(i = 0, k = 0; k < c; k ++)  // 新的s1。
                    s1[i ++] = s12[k];
                s1[i] = 0;
                for(i = 0, k = c; k < 2 * c; k ++)  // 新的s2。
                    s2[i ++] = s12[k];
                s2[i] = 0;
                if(!strcmp(s1, str1))  // 等到s1经过x次变换后回到str1,则说明不可能到达目标情况了。
    
                    break; 
            }
            if(flag) printf("%d %d
    ",t,ans);      
            else printf("%d -1",t); 
        }
        return 0;
    }
  • 相关阅读:
    MapReduce案例
    Hive学习笔记九
    大数据技术之Hive
    Hive学习笔记八
    Hive学习笔记七
    Hive学习笔记六
    大数据应用技术课程实践--选题与实践方案
    15.手写数字识别-小数据集
    14.深度学习-卷积
    13.垃圾邮件分类2
  • 原文地址:https://www.cnblogs.com/KID-XiaoYuan/p/6392172.html
Copyright © 2011-2022 走看看