POJ 3087 Shuffle'm Up - 模拟

来源:互联网 发布:沈阳seo技术 编辑:程序博客网 时间:2024/05/17 02:56

今天某沙做搜索专题的时候,碰到了一道模拟题。于是果断丢给我了。

开始看了题目还以为要用到stack,结果发现并不需要用到栈,只要用string类直接模拟就可以了。

大致说一下思路,就是用两堆牌来洗牌,看什么时候能洗到题目所给的情况,为了判断能否洗到所给情况,需要用map来记录一下已经出现过的情况。

如果没有出现题目所给的情况,但是已经出现了之前出现过的情况,说明洗牌已经成了一个环,始终无法洗到所给情况,这时候直接输出-1即可,否则每一次都要把洗完的牌,最下边的给s1,最上边的给s2。

用字符串数组和string类都可以,用string类要注意不能用角标替换,因为对string类不是很熟练,所以今天用了string类来做。

代码:

#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <map>using namespace std;int main(){    int T,c,i,count,cas=1;    cin>>T;    while(T--)    {        count=1;        cin>>c;        string s1,s2,s;        cin>>s1>>s2>>s;          //输入两堆牌以及需要找到的情况        map<string,bool> m;     //用来记录是否已经出现过        m[s]=true;        cout<<cas++<<' ';        while(true)        {            string sh;          //创建一个string类专门存每一次洗牌后的结果            string ss1,ss2;     //两个string类来记录洗牌后两堆牌的情况            for(i=0;i<c;i++)            {                sh+=s2[i];                sh+=s1[i];            }            if(!sh.find(s))           //找到所给情况输出            {                cout<<count<<endl;                break;            }            else if(sh.find(s)&&m[sh])      //未找到所给情况并且已经出现重复情况            {                cout<<-1<<endl;                break;            }            m[sh]=true;                //未出现的情况记录下来            count++;            for(i=0;i<c;i++)                ss1+=sh[i];            for(i=c;i<c*2;i++)                ss2+=sh[i];            s1=ss1;            s2=ss2;        }    }    return 0;}


这道模拟的代码不是很长,主要是对string类和字符串类的熟练掌握以及对题目的理解。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 仓鼠喝了牛奶该怎么办 宠物兔不吃不喝怎么办 兔子把木屑吃了怎么办? 小车司机碰瓷大车司机怎么办 在淘宝买到假的护肤品怎么办 淘宝购物发现是假的怎么办 电脑键盘灯不亮不能打字怎么办 海棠兔屁股有屎怎么办 大冒险告白被接受了怎么办剧透微博 大冒险被告白了怎么办 腐书网 大冒险告白被接受了怎么办 006 大冒险告白被接受了怎么办广播剧 coolpad手机解锁图案忘了怎么办 装死兔严重掉毛怎么办 兔子嘴巴磕破了怎么办 嘴巴里面摔烂了怎么办 兔子的鼻子损了怎么办 两个人嘴巴被粘牙糖粘住怎么办 小鸟被老鼠粘粘住了怎么办 小猫被老鼠粘粘住怎么办 羊子嘴巴烂了怎么办 小孩突然嘴肿了怎么办 电视机图像颜色变了 怎么办 冰沙床垫结块了怎么办 冰沙床垫融化了怎么办 脚真菌感染肿了怎么办 水雾魔珠被吃了怎么办 怀孕40天出血了怎么办 联璧金融里的钱怎么办 提现的钱不对怎么办 究极日月蛋太多怎么办 人脸识别不匹配怎么办 地下城没有属强怎么办 传奇属性点错了怎么办 龙之谷技能太多怎么办 龙之谷pk卡怎么办 为什么访问别人空间没有记录怎么办 被蚊孑咬了有小红包怎么办 微信建了个打牌群找不客源怎么办 三星手机一直停在开机画面怎么办 微信猜拳被骗了怎么办