[BNUZOJ1261][ACM][2016北理校赛]方块消除(栈,字符串)

Posted hdw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BNUZOJ1261][ACM][2016北理校赛]方块消除(栈,字符串)相关的知识,希望对你有一定的参考价值。

玩过方块消除游戏吗?
现在规定当有两个或两个以上相邻且颜色相同的方块在一起的时候,它们就会产生消除反应。当存在多个消除反应同时产生时,最下的反应先执行。
现在只给你其中一列,求最后剩下的方块结果。
 


输入要求

第一行是一个整数T(T<=100),表示有T组测试数据。
每组测试数据一行。
每行有一串数字(数字长度<=1,000,000),按从下往上给出一列方块的颜色(颜色用0-9表示,每个数字代表一种颜色)。
(数字长度大于100,000的不超过5组)
 

输出要求

输出消除后的结果。
 

测试数据示例

输入

2
1800081
180008945541
 

输出

(空行)
 
没什么特别的.水题了,主要是利用栈的思想,字符串搞搞就行了(这里我用Java的StringBUffer)
 
Code:
 
package bnuzoj1261;

import java.util.Scanner;

public class Main {

    public static void run( String str ) {

        StringBuffer sb = new StringBuffer();
        char[] chs = str.toCharArray();
        sb.append( chs[ 0 ] );
        for( int i = 1; i < str.length(); ) {
            if(sb.length() < 1){
                sb.append( chs[i] );
                i++;
            }
            else if( chs[ i ] != sb.charAt( sb.length()-1 ) ) {
                sb.append( chs[i] );
                i++;
            } else {
                if( chs[i] == sb.charAt( sb.length()-1 )){
                    do{
                        i++;
                    }while(i<chs.length && chs[i] ==sb.charAt( sb.length()-1 ));
                 sb.delete(sb.length()-1,sb.length());
                }
            }
        }
        System.out.println( sb.toString() );
    }

    public static void main( String[] args ) {
        Scanner sc = new Scanner( System.in );
        int T = sc.nextInt();

        while( T-- > 0 ) {
            String str = sc.next();
            run( str );
        }
    }

}

Ps:注意消除是左边优先.

 
 

以上是关于[BNUZOJ1261][ACM][2016北理校赛]方块消除(栈,字符串)的主要内容,如果未能解决你的问题,请参考以下文章

Problem1261 字串数

fafu 1261 取数相加

北邮 北理 人大经验

北理西交计算机夏令营机试题

四叠半神话大系(bfs序+st+在线倍增+二分)(北理16校赛)

HDOJ 1261 字串数