zoukankan      html  css  js  c++  java
  • B 方块消消乐

    时间限制 : - MS   空间限制 : - KB 
    评测说明 : 1s,128m
    问题描述

    何老板在玩一款消消乐游戏,游戏虽然简单,何老板仍旧乐此不疲。
    游戏一开始有n个边长为1的方块叠成一个高为n的柱子。
    有红色和蓝色两种方块。
    游戏操作:玩家选择两个相邻且不同色的方块,将它们消除。然后上方的方块会自动落下来,使得剩下的方块始终保持柱状。

    玩家可以进行任意次上述操作,消除的方块越多,得分越高。何老板想知道:最多能消除掉多少方块?

    输入格式

    一个由0和1构成的字符串,表示游戏开始时的方块柱子。其中0表示蓝色方块,1表示红色方块。

    输出格式

    一个整数,表示最多能消除的方块数。

    样例输入 1

    0011

    样例输出 1

    4

    样例输入 2

    11011010001011

    样例输出 2

    12

    样例输入 3

    0

    样例输出 3

    0

    提示

    设字符串的长度为n

    1 ≤ n ≤ 105

    【分析】

      这道题我们可以将第二个样例画在纸上,按照要求依次消去每一个相邻的1和0,剩下的接在一起,最后剩下的一定是1和0中数量多的。因此,在读入时记录1和0的个数,然后输出2 * max(Cnt_0, Cnt_1)即可。

    注意:因为不知道字符串长度,如果使用“while(scanf("%d", &A[i]) != EOF)“的话会报错,因为可能第一个输入0就返回0,导致程序不运行。因此使用字符串可以规避这个问题。

    【标程】

     1 #include<iostream>
     2 using namespace std;
     3 int Len, Cnt_0, Cnt_1;
     4 string S;
     5 void ini() {
     6     cin >> S;
     7     Len = S.length();
     8 }
     9 void solve() {
    10     for (int i = 0; i <= Len; ++ i)
    11         if (S[i] == '0')++ Cnt_0;
    12         else if (S[i] == '1')++ Cnt_1;
    13     printf("%d", 2 * min(Cnt_0, Cnt_1));
    14 }
    15 int main() {
    16     ini();
    17     solve();
    18     return 0;
    19 }
  • 相关阅读:
    [hadoop](2) MapReducer:Distributed Cache
    [hadoop](1) MapReduce:ChainMapper
    hadoop平台搭建
    postgresql主从同步配置
    问题记录-java图片验证码显示乱码
    windows mongodb启动
    新的开始
    springboot和Redis整合
    springboot的简单热部署
    springmvc模式下的上传和下载
  • 原文地址:https://www.cnblogs.com/Limbo-To-Heaven/p/11335741.html
Copyright © 2011-2022 走看看