ALDS1_3_D: Areas on the Cross-Section Diagram

来源:互联网 发布:天猫跟淘宝的区别 编辑:程序博客网 时间:2024/05/08 15:00

ALDS1_3_D: Areas on the Cross-Section Diagram

题目摘要


计算积水的面积
计算积水的面积。

输入

1行,用”\”和”/”表示斜面,用”_”表示平地。

输出

第1行输出总面积,第2行输出积水数量和各积水处的横截面积。

#include<iostream>#include<stack>#include<vector>#include<string>#include<algorithm>using namespace std;int main(){    stack<int> S1;    //储存"\"    stack<pair<int,int>> S2;    //(该积水处最左侧"\"的位置,该积水处当前的面积)    char ch;    int sum=0;    //总面积    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;    cout<<ans.size();    for(int i=0;i<ans.size();i++)    {        cout<<" ";        cout<<ans[i];    }    cout<<endl;    //输出}
0 0
原创粉丝点击