http://poj.org/problem?id=3087
题意 : 我只能说,,英语不好是硬伤。。。这个题比较别扭啊,不知道真正题意是不是我所想的,我先把我A了的代码按照的题意的意思说一下,就是说两堆字符串每堆n个字符,从下边开始轮流取,其实输入之后就是从头开始取,先取第二个字符串的,放在最底下,再取第一个的,直到合成一个新的,然后再把下边n个取出来当成第一个字符串,上边n个当成第二个字符串,继续进行上述操作,直到新合成的字符串与题目中给出的目标字符串相同,若是合不成就输出-1,每次输出先输出是第几组数据,再输出需要几次可以达到目标字符串
思路 : 模拟?还行吧,挺简单的,用map函数标记一下就行,若是新合成的与之前某个合成的一样的,代表着这一组会陷入无限循环中,所以直接输出-1就行了
 
    
    
        #include<cstdio>
        
          
#include
        
        <iostream>
        
          
#include
        
        <map>
        
          
#include
        
        <cstring>
        
          using
        
        
          namespace
        
        
           std ;
        
        
          const
        
        
          int
        
         maxn = 
        
          1010
        
        
           ;
        
        
          int
        
        
           main()
{
    
        
        
          int
        
        
           n ;
    cin
        
        >>
        
          n ;
    
        
        
          char
        
        
           ch[maxn],sh[maxn],sch[maxn],neww[maxn] ;
    
        
        
          for
        
        (
        
          int
        
         i = 
        
          1
        
         ; i <= n ; i++
        
          )
    {
        map
        
        <
        
          string
        
        ,
        
          int
        
        >
        
           p ;
        
        
        
          int
        
         m ,cnt = 
        
          0
        
         ,sum = 
        
          0
        
        
          ;
        cin
        
        >>
        
          m ;
        cin
        
        >>ch>>sh>>
        
          sch ;
        cout
        
        <<i<<
        
          '
        
        
          '
        
        
          ;
        
        
        
          while
        
        (
        
          1
        
        
          )
        {
            cnt 
        
        = 
        
          0
        
        
           ;
            
        
        
          for
        
        (
        
          int
        
         j = 
        
          0
        
         ; j < m ; j++
        
          )
            {
                neww[cnt
        
        ++] =
        
           sh[j] ;
                neww[cnt
        
        ++] =
        
           ch[j] ;
            }
            neww[
        
        
          2
        
        *m] = 
        
          '
        
        
          \0
        
        
          '
        
        
          ;
            sum
        
        ++
        
           ;
            
        
        
          if
        
        (strcmp(neww,sch) == 
        
          0
        
        
          )
            {
                cout
        
        <<sum<<
        
          endl;
                
        
        
          break
        
        
           ;
            }
            
        
        
          if
        
        
          (p[neww])
            {
                cout
        
        <<
        
          "
        
        
          -1
        
        
          "
        
        <<
        
          endl;
                
        
        
          break
        
        
           ;
            }
            p[neww]
        
        ++
        
           ;
            strncpy(ch,neww,m);
            ch[m]
        
        =
        
          '
        
        
          \0
        
        
          '
        
        
          ;
            strcpy(sh,neww
        
        +
        
          m);
        }
    }
}
        
      
    


 
     
					 
					