zoukankan      html  css  js  c++  java
  • 3087Shuffle'm Up

    不知道为什么compile error,第一次用#include "map",可能就是因为这个原因吧,上次有个同学介绍我上一个网站,它可以帮我评定是那一部分出错

    我的代码

    #include "iostream"
    #include "algorithm"
    #include <map>
    #include <string.h>
    using namespace std;
    int main(){
      int top=1,step,flag1,ncase,n,j,i;
      char list1[110],list2[110],list3[220],list4[220],endlist[220];
      cin>>ncase;
      while(ncase--){
        cin>>n;
        cin>>list1>>list2>>list3;
        step=0;flag1=0;
        map<string,bool>vis;
        while(1){
          j=0;
          for(i=0;i<n;i++){
            endlist[j++]=list2[i];
            endlist[j++]=list1[i];
          }
          endlist[j]='';
          step++;
          if(vis[endlist])break;
          if(!strcmp(endlist,list3)){flag1=1;break;}
          vis[endlist]=true;
          for(i=0;i<n;i++){
            list1[i]=endlist[i];
            list2[i]=endlist[i+n];
          }
          list1[i]='';
          list2[i]='';
        }
        if(flag1)cout<<top++<<' '<<step<<endl;
        else cout<<top++<<' '<<-1<<endl;
      }
      return 1;
    }

    人家的代码

    #include<iostream>
    #include<string>
    #include<map>
    using namespace std;
     
    int main(int i,int k)
    {
        int test,c;
        int t=0;
        cin>>test;
        while(++t<=test)
        {
            cin>>c;
            char s1[201];   //牌堆1
            char s2[201];   //牌堆2
            char s12[401];  //预设最终的牌堆状态
            cin>>s1>>s2>>s12;
     
            map<string,bool>vist;   //记录出现过的洗牌状态(map缺省值为0)
            vist[s12]=true;
     
            int step=0;  //洗牌次数
            while(true)
            {
                char s[201];  //当前s1与s2洗牌后的状态
                int ps=0;  //s[]指针
                for(i=0;i<c;i++)    //s1与s2洗牌
                {
                    s[ps++]=s2[i];
                    s[ps++]=s1[i];
                }
                s[ps]='';
     
                step++;
                 
                if(!strcmp(s,s12))   //当洗牌后的状态能达到预设状态时,输出
                {
                    cout<<t<<' '<<step<<endl;
                    break;
                }
                else if(vist[s] && strcmp(s,s12))  //当前洗牌后状态 与 前面出现过的状态重复了,但该状态不是预设状态
                {                                  //说明预设的状态无法达到
                    cout<<t<<' '<<-1<<endl;
                    break;
                }
     
                vist[s]=true;   //状态记录
     
                for(i=0;i<c;i++)   //分拆出s1与s2
                    s1[i]=s[i];
                s1[i]='';
     
                for(k=0;i<2*c;i++,k++)
                    s2[k]=s[i];
                s2[i]='';
            }
        }
        return 0;
    }
  • 相关阅读:
    迭代器模式
    工厂方法模式
    ajax发送多个跨域请求回调不混乱
    Java中&和&&的区别
    使用jstl方式替换服务器请求地址
    用jinja2替换Django的模板
    Django在apache中的配置
    从word中提取图片的三种方法
    IE中出现 "Stack overflow at line" 错误的解决方法
    c# 空接合(??)运算符的运用
  • 原文地址:https://www.cnblogs.com/dowson/p/3347673.html
Copyright © 2011-2022 走看看