zoukankan      html  css  js  c++  java
  • 祖玛游戏

    祖玛游戏

    问题描述:
    祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。
    开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。
    游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。
    输入格式:
    第一行是一个由大写字母’A’~’Z’组成的字符串,表示轨道上初始的珠子序列,不同的字母表示不同的颜色。
    第二行是一个数字,表示整个回放过程共有次操作。
    接下来的行依次对应于各次操作。每次操作由一个数字和一个大写字母描述,以空格分隔。其中,为新珠子的颜色。若插入前共有颗珠子,则表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。
    输出格式:
    输出共行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上的珠子序列。
    如果轨道上已没有珠子,则以“-”表示。
    样例输入:
    ACCBA
    5
    1 B
    0 A
    2 B
    4 C
    0 A
    样例输出
    ABCCBA
    AABCCBA
    AABBCCBA
    -
    A
    规则:
    这个游戏与平时的祖玛游戏不太一样。
    在AAABBCCC中的A和B之间插入B时,BBB消去,CCC也消去,但是AAA不会改变。
    输入也会出现空串的情况,使用gets读

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn=2010;
    int n,x;
    char y,a[maxn],tmp[maxn];
    bool judge(int t)
    {
        int step=0,tmpo=t;
        while(tmpo<=strlen(a)&&a[tmpo++]==a[t])
        step++;tmpo=t-1;
        while(tmpo>=0&&a[tmpo--]==a[t])
        step++;
        if(step>=3)
        return 1;
        return 0;
    }
    int change(int t)
    {
        int end=t,star=t;
        while(a[star]==a[t])
        star--;star++;
        while(a[end]==a[t])
        end++;
        strcpy(a+star,a+end);
        if(a[star]==a[star-1])
        {
            if(star==0)
            return 1;
            return star;
        }
        else if(a[star]==a[star+1])
        return star;
        return 0;
    }
    int main()
    {
        freopen("ha.in","r",stdin);
        freopen("ha.out","w",stdout);
        gets(a);
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>x>>y;
            strcpy(tmp,a+x);
            a[x]=y;
            strcpy(a+x+1,tmp);
            while(judge(x))
            x=change(x);
            if(a[0]=='')
            cout<<"-"<<endl;
            else cout<<a<<endl;
        }
        fclose(stdin);fclose(stdout);
        return 0;
    }
  • 相关阅读:
    hdu 1823 Luck and Love 二维线段树
    UVA 12299 RMQ with Shifts 线段树
    HDU 4578 Transformation 线段树
    FZU 2105 Digits Count 线段树
    UVA 1513 Movie collection 树状数组
    UVA 1292 Strategic game 树形DP
    【ACM】hdu_zs2_1003_Problem C_201308031012
    qsort快速排序
    【ACM】nyoj_7_街区最短路径问题_201308051737
    【ACM】nyoj_540_奇怪的排序_201308050951
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070907.html
Copyright © 2011-2022 走看看