zoukankan      html  css  js  c++  java
  • Areas on the Cross-Section Diagram Aizu

    Your task is to simulate a flood damage.

    For a given cross-section diagram, reports areas of flooded sections.
    在这里插入图片描述

    Assume that rain is falling endlessly in the region and the water overflowing from the region is falling in the sea at the both sides. For example, for the above cross-section diagram, the rain will create floods which have areas of 4, 2, 1, 19 and 9 respectively.

    Input

    A string, which represents slopes and flat lands by ‘/’, ‘’ and '’ respectively, is given in a line. For example, the region of the above example is given by a string "///_//\/////__\_///".

    output

    Report the areas of floods in the following format:

    A
    k L1 L2 … Lk

    In the first line, print the total area A of created floods.

    In the second line, print the number of floods k and areas Li(i=1,2,…,k) for each flood from the left side of the cross-section diagram. Print a space character before Li.

    Constraints

    1≤ length of the string ≤20,000

    Sample Input 1

    //

    Sample Output 1

    4
    1 4

    Sample Input 2

    ///_//\/////__\_//_/

    Sample Output 2

    35
    5 4 2 1 19 9

    code

    /*
                                    ^....0
                                   ^ .1 ^1^
                                   ..     01
                                  1.^     1.0
                                 ^ 1  ^    ^0.1
                                 1 ^        ^..^
                                 0.           ^ 0^
                                 .0            1 .^
                                 .1             ^0 .........001^
                                 .1               1. .111100....01^
                                 00             ^   11^        ^1. .1^
                                 1.^                              ^0  0^
                                   .^                                 ^0..1
                                   .1                                   1..^
                                 1 .0                                     ^  ^
                                ^ 00.                                     ^^0.^
                                 1 ^ 0                                     ^^110.^
                               0.   0 ^                                    ^^^10.01
                       ^^     010^   1 1                                   ^^^1110.1
                       0001  10 0   ^ 1.1                                   ^^^1111110
                       0^ 10 . 01   ^^  ^^                                   ^^^1111^1.^           ^^^
                       10  10^ 0^                                             ^^111^^^0.1^       1....^
                        11     0                                               ^^11^^^ 0..  ....1^   ^ ^
                        1.     0^                                               ^11^^^ ^ 1 111^     ^ 0.
                       10   00 11                                               ^^^^^   1 0           1.
                       0^  ^0  ^0                                                ^^^^    0            0.
                       0^  1.0  .^                                               ^^^^    1 1          .0
                       ^.^  ^^  0^                             ^1                ^^^^     0.         ^.1
                       1 ^      11                             1.                ^^^     ^ ^        ..^
                      ^..^      ^1                             ^.^               ^^^       .0       ^.0
                      0..^      ^0                              01               ^^^       ..      0..^
                     1 ..        .1                             ^.^              ^^^       1 ^  ^0001
                    ^  1.        00                              0.             ^^^        ^.0 ^.1
                    . 0^.        ^.^                             ^.^            ^^^         ..0.0
                   1 .^^.         .^                  1001        ^^            ^^^         . 1^
                   . ^ ^.         11                0.    1         ^           ^^          0.
                    0  ^.          0              ^0       1                   ^^^          0.
                  0.^  1.          0^             0       .1                   ^^^          ..
                  .1   1.          00            .        .1                  ^^^           ..
                 1      1.         ^.           0         .^                  ^^            ..
                 0.     1.          .^          .         0                                  .
                 .1     1.          01          .        .                                 ^ 0
                ^.^     00          ^0          1.       ^                                 1 1
                .0      00           .            ^^^^^^                                   .
                .^      00           01                                                    ..
               1.       00           10                                                   1 ^
              ^.1       00           ^.                                            ^^^    .1
              ..        00            .1                                        1..01    ..
             1.1         00           1.                                       ..^      10
            ^ 1^         00           ^.1                                      0 1      1
            .1           00            00                                       ^  1   ^
             .           00            ^.^                                        10^  ^^
           1.1           00             00                                              10^
           ..^           1.             ^.                                               1.
          0 1            ^.              00                 00                            .^
            ^            ^.              ^ 1                00   ^0000^     ^               01
         1 0             ^.               00.0^              ^00000   1.00.1              11
         . 1              0               1^^0.01                      ^^^                01
          .^              ^                1   1^^                                       ^.^
        1 1                                                                              0.
        ..                                                                              1 ^
         1                                                                               1
       ^ ^                                                                             .0
       1                                                                             ^ 1
       ..                                                          1.1            ^0.0
      ^ 0                                                           1..01^^100000..0^
      1 1                                                            ^ 1 ^^1111^ ^^
      0 ^                                                             ^ 1      1000^
      .1                                                               ^.^     .   00
      ..                                                                1.1    0.   0
      1.                                                                  .    1.   .^
      1.                                                                 1    1.   ^0
     ^ .                                                                 ^.1 00    01
     ^.0                                                                  001.     .^
     */
    // Virtual_Judge —— Areas on the Cross-Section Diagram Aizu - ALDS1_3_D .cpp created by VB_KoKing on 2019-04-29:20.
    /* Procedural objectives:
    
     Variables required by the program:
    
     Procedural thinking:
     1.计算总面积:对输入的字符si进行逐个检查:
        如果是“”,则将表示该字符位置(从开头数第几个字符)的整数i压入栈S1;
        如果是“/”,则从栈S1顶部取出与之对应的“”的位置i,算出二者的距离i-j并累加到总面积里;
        字符“_”的作用只是将一对“”与“/”的距离加+,因此从栈中取出“”时可以直接与对应的“/”计算距离,不必考虑“_”。
     2.求各积水处面积
        另建一个栈S2来保存各积水处的面积
        栈S2中的每个元素包含一对数据,分别是“该积水处最左侧‘’的位置”和“该积水处当前的面积”。
     Functions required by the program:
    
    */
    /* My dear Max said:
    "I like you,
    So the first bunch of sunshine I saw in the morning is you,
    The first hurricane that passed through your ear is you,
    The first star you see is also you.
    The world I see is all your shadow."
    
    FIGHTING FOR OUR FUTURE!!!
    */
    #include <iostream>
    #include <stack>
    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        char ch;
        int sum=0;
        stack<int> S1;
        stack< pair<int,int> > S2;
        for (int i = 0; cin>>ch ; i++) {
            if (ch=='\') S1.push(i);
            else if (ch=='/'&&S1.size()>0)
            {
                int j=S1.top();
                S1.pop();
                sum+=i-j;
                int a=i-j;
                while (S2.size()>0&&S2.top().first>j)
                {
                    a+=S2.top().second;
                    S2.pop();
                }
                S2.push(make_pair(j,a));
            }
        }
    
        vector<int> ans;
        while (S2.size()>0)
        {
            ans.push_back(S2.top().second);
            S2.pop();
        }
        reverse(ans.begin(),ans.end());
        cout<<sum<<endl<<ans.size();
        for (int i = 0; i < ans.size(); i++)
            cout<<' '<<ans[i];
        cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    hadoop配置支持LZO压缩格式并支持分片
    CSS 图片:如何使用 CSS 来布局图片
    CSS3 用户界面:用户界面特性来调整元素尺寸,框尺寸和外边框
    CSS3 多列:如何将文本内容设计成像报纸一样的多列布局?
    mac Pycharm:如何使用anaconda安装jieba
    pycharm如何安装jieba词频统计器?
    CSS3 动画:使元素从一种样式逐渐变化为另一种样式的效果
    CSS3 过渡:用鼠标移过逐渐改变它原有样式
    CSS3 3D 转换:使用 3D 转换来对元素进行格式化
    CSS3 2D 转换:对元素进行移动、缩放、转动、拉长或拉伸
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338384.html
Copyright © 2011-2022 走看看