zoukankan      html  css  js  c++  java
  • POJ3087Shuffle'm Up(map)

    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] = '';
                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]='';
                strcpy(sh,neww+m);
            }
        }
    }
    View Code
  • 相关阅读:
    vsftpd安装问题汇总(持续更新。。)
    Office2010安装问题总结
    AM335X 开发板安装vsftpd操作流程
    Source Insight常用快捷键及注释快捷键设置
    小四轴之第二次飞行篇
    linux命令df中df -h和df -i
    Linux tail 命令
    Linux chmod命令用法
    ps -ef |grep java
    jupyter notebook安装、登录
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3284335.html
Copyright © 2011-2022 走看看