zoukankan      html  css  js  c++  java
  • POJ 3087 Shuffle'm Up 线性同余,暴力 难度:2

    http://poj.org/problem?id=3087

    设:s1={A1,A2,A3,...Ac}

    s2={Ac+1,Ac+2,Ac+3,....A2c}

    合在一起成为

    Ac+1,A1,Ac+2,A2......A2c,Ac

    经过一次转换之后变成

    s1={Ac+1,A1,Ac+2.....}

    s2={...A2c,Ac}

    对应之前,每个数的序号发生的变化是

    +1,+2,+3....-c,-c+1,.....

    把整个数链想成环,也相当于是:

    +1,+2,+3....+c,+c+1,.......

    例如A1,由A1->A2->A4->A7....c次之后必然回到A1

    所以整个串经过一定次数的变换一定会回到最初状态,只需判断在回到最初状态之前有没有得到目标状态即可

    #include <cstdio>//a=(a+c+1)%(2*c)
    #include <cstring>
    using namespace std;
    const int maxn=1002;
    int c;
    char s1[maxn],s2[maxn],aim[maxn],org[maxn],tmp[maxn];
    void shuffle(){
            for(int i=0;i<c;i++){
                    tmp[2*i]=s2[i];
                    tmp[2*i+1]=s1[i];
            }
            tmp[2*c]=0;
    }
    int main(){
            int T;
            scanf("%d",&T);
            for(int ti=1;ti<=T;ti++){
                    scanf("%d%s%s%s",&c,s1,s2,aim);
                    shuffle();
                    strcpy(org,tmp);
                    int ans=1;
                    if(strcmp(tmp,aim)==0){
                            printf("%d 1
    ",ti);
                            continue;
                    }
                    bool fl=false;
                    while(strcmp(org,tmp)!=0||ans==1){
                            strncpy(s1,tmp,c);
                            strncpy(s2,tmp+c,c);
                            shuffle();
                            ans++;
                            if(strcmp(tmp,aim)==0){
                                    fl=true;
                                    printf("%d %d
    ",ti,ans);
                                    break;
                            }
                    }
                    if(!fl)printf("%d -1
    ",ti);
            }
            return 0;
    }
    

      

  • 相关阅读:
    关于排序算法的记录
    java获取src下文件
    学习HashMap的笔记
    红黑树删除
    学习红黑树过程中的个人总结
    关于二叉树的记录
    关于自动装箱和自动拆箱
    学习函数的时候问题
    Oracle 实现拆分列数据的split()方法
    福大软工 · 最终作业
  • 原文地址:https://www.cnblogs.com/xuesu/p/4338159.html
Copyright © 2011-2022 走看看