社区讨论
【违规紫衫】关于计算面积
学术版参与者 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;
}
在代码 ~ 行那段不懂,请求大佬告诉我什么意思qwq
CPPwhile (s2.size() > 0 && s2.top().first > j)
{
a += s2.top().second;
s2.pop();
}
就这段
回复
共 2 条回复,欢迎继续交流。
正在加载回复...