zoukankan      html  css  js  c++  java
  • poj3087 Shuffle'm Up 骗子,这根本不是宽搜,这就是模拟

    本题就直接模拟就OK啦,停止有2个条件,一个条件是达到目的串,另一个条件就是S1经过多次模拟又回到原始串。

    题意不太好懂。那我就说一下吧。

    就是经过shuffle,split,两个步骤,不断的进行这两个步骤,知道出现可以触发停止的条件位置。

     1 #include <iostream>
     2 #include <string>
     3 #include <string.h>
     4 #include <stdio.h>
     5 using namespace std;
     6 int l;
     7 void split(string &t1,string &t2,string t)
     8 {
     9     int i,j;
    10     for(i=0;i<l;++i)
    11     {
    12         t1[i]=t[i];
    13     }
    14     for(i=0,j=l;i<l;++i,++j)
    15     {
    16         t2[i]=t[j];
    17     }
    18     return ;
    19 }
    20 void shuffle(string t1,string t2,string &t)
    21 {
    22     int i,j;
    23     for(i=0,j=0;i<2*l;i=i+2,j++)
    24         t[i]=t2[j];
    25     for(i=1,j=0;i<2*l;i=i+2,j++)
    26         t[i]=t1[j];
    27     return ;
    28 }
    29 int main()
    30 {
    31     int tt;
    32     int k;
    33     int cnt;
    34     string aim,bt1,bt2;
    35     string t1,t2,t;
    36     bool success;
    37     bool sign;
    38     while(cin>>tt)
    39     {
    40         for(k=1;k<=tt;++k)
    41         {
    42             cnt=0;
    43             cin>>l;
    44             cin>>bt1>>bt2>>aim;
    45             success=0;
    46             t1=bt1;
    47             t2=bt2;
    48             t=bt1+bt2;
    49             sign=0;
    50             while(1)
    51             {
    52                 cnt++;
    53                 if(t1==bt1&&sign==1)
    54                     break;
    55                 sign=1;
    56                 shuffle(t1,t2,t);
    57                 if(t==aim)
    58                 {
    59                     success=1;
    60                     break;
    61                 }
    62                 split(t1,t2,t);
    63 
    64             }
    65             cout<<k<<" ";
    66             if(success==0)
    67                 cout<<-1<<endl;
    68             else
    69                 cout<<cnt<<endl;
    70         }
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    弄懂Java为何只有值传递
    反转链表进阶
    剑指Offer-16:合并两个有序链表
    剑指Offer-15:反转链表
    剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。
    剑指Offer-13:调整数组位置使奇数位于偶数前面
    Java实现二分查找
    LDAP
    关于Prometheus运维实践项目
    LDAP-openldap服务部署和测试(YUM安装)
  • 原文地址:https://www.cnblogs.com/symons1992/p/2971927.html
Copyright © 2011-2022 走看看