社区讨论
请问为什么队列顺序调换后位置调换了
P5661[CSP-J 2019] 公交换乘参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjhmini
- 此快照首次捕获于
- 2025/11/04 02:42 4 个月前
- 此快照最后确认于
- 2025/11/04 02:42 4 个月前
请问为什么队列顺序调换后位置调换了?
(此处队列用来存放优惠票)
CPP#include <bits/stdc++.h>
using namespace std;
struct node {
int p, ti;
node(int pp, int ii) {
p = pp;
ti = ii;
}
};
int n, k, a, t, sum, sf;
queue<node> q;
void cou() {
int c = q.size();
cout << "当前剩余 " << q.size() << " 张票。\n";
while (c--) {
node now = q.front();
cout << "(" << q.front().p << ", " << q.front().ti << ") ";
q.pop();
q.push(now);
}
cout << endl;
return ;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> k >> a >> t;
if (k == 0) {
sum += a;
q.push(node(a, t));
} else {
sf = 0;
while (q.size()) {
if (q.front().ti + 45 >= t) {
int o = q.size() - 1;
while (o--) {
cout << "o=" << o << endl;
node no = q.front();
q.pop();
if (no.p >= a) {
cout << "###i=" << i << " p=" << q.front().p << " a=" << a << "\n";
if (sf == 0) {
sf = 1;
break;
}
}
q.push(no);
}
break;
} else {
q.pop();
}
}
if (!sf) {
sum += a;
}
}
cout << "在第 " << t << " 分钟花费 " << a << " 元乘坐";
if (k == 0) {
cout << "地铁。\n";
} else {
cout << "公交车。\n";
if (sf) {
cout << "有可使用的优惠票,免除费用。\n";
}
}
cou();
cout << "一共花费 " << sum << " 元。\n\n";
}
cout << sum;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...