社区讨论

【违规紫衫】关于计算面积

学术版参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo1hzjt4
此快照首次捕获于
2023/10/22 21:21
2 年前
此快照最后确认于
2023/11/02 22:15
2 年前
查看原帖
在《挑战程序设计竞赛2》中,有道题(P86),太晚了懒得打,题目在
书上用的是栈,然后有不懂的地方(刚刚写了一个帖子的问题,就从网上赫了),请求大佬指示:
CPP
#include <bits/stdc++.h>
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();
    int len = ans.size();
    for (int i = 0; i < len; i++)
    {
        cout << " ";
        cout << ans[i];
    }
    cout << endl;
    return 0;
}

在代码 1919 ~ 2323 行那段不懂,请求大佬告诉我什么意思qwq
CPP
while (s2.size() > 0 && s2.top().first > j)
            {
                a += s2.top().second;
                s2.pop();
            }
就这段

回复

2 条回复,欢迎继续交流。

正在加载回复...