[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北理校赛]方块消除(栈,字符串)的主要内容,如果未能解决你的问题,请参考以下文章