社区讨论

请问为什么队列顺序调换后位置调换了

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 条回复,欢迎继续交流。

正在加载回复...