舞萌 DX 游戏机排队系统模拟/n/n## 题目背景/n/n你说得对,但是舞萌 DX 是一款后面忘了。/n/n## 题目描述/n/n补充说明:这里的排队和传统的排队有出入。正在游玩的人为队列的前两位,所以正在游玩视为正在排队。/n/n机厅里有一台游戏机,每次可供最多两人同时游玩。但是来玩的人显然不止两个!这个时候他们就需要排队了,而你需要写一个程序维护这个队列,并在他人游玩结束后通知接下来上场的人。在整个过程中,有以下几种事件可能发生:/n/n- 'start':一局游戏开始。若这不是第一局游戏,则上一局的参与者按照原本的顺序回到队尾。此时你应该按在队列中的顺序输出这一局上场的人的名字(正常来讲是队列前两位或者唯一一个人),若有两个则以空格分割。若这一局无人上场,则输出 'Error' 并忽略这条事件。/n/n- 'arrive x':$x$ 到达机厅并且将自己加入队尾,此时 $x$ 不应该在排队,否则输出 'Error' 并忽略这条事件。若该事件成功执行则输出 'OK'。/n/n- 'leave x':$x$ 离开机厅并离开队列。此时 $x$ 应该在排队但不应该在游玩,否则输出 'Error' 并忽略这条事件。若该事件成功执行则输出 'OK'。/n/n你需要维护队列信息,并输出上述事件中要求的输出。/n/n## 输入格式/n/n第一行一个整数 $n$,表示事件条数。/n/n接下来 $n$ 行,每行表示一条事件。/n/n## 输出格式/n/n按照题目要求输出 $n$ 行,表示程序对事件的响应。/n/n## 样例 #1/n/n### 样例输入 #1/n/n/n14/nstart/narrive A/nstart/narrive B/narrive C/narrive D/nstart/nleave C/nleave D/nstart/narrive A/narrive D/nleave E/nstart/n/n/n### 样例输出 #1/n/n/nError/nOK/nA/nOK/nOK/nOK/nB C/nError/nOK/nA B/nError/nOK/nError/nC D/n/n/n## 样例 #2/n/n### 样例输入 #2/n/n/n3/narrive A/narrive B/narrive C/n/n/n### 样例输出 #2/n/n/nOK/nOK/nOK/n/n/n## 提示/n/n**【样例说明】/n/n样例 $1$ 中发生了如下的事件:/n/n- 第一次 'start' 时队列并没有任何人,输出 'Error'。/n- 'A' 随即加入队列。/n- 第二次 'start' 时仅有 'A' 一个人,所以输出 'A'。/n- 'B, C, D' 随即依次加入队列。/n- 第三次 'start' 时 'B, C' 上场。/n- 'C' 试图离开,但是他在游玩。所以输出 'Error'。/n- 'D' 成功离开。/n- 第四次 'start' 时 'A, B' 上场。/n- 'A' 试图加入队列,但是他已经在队列中。输出 'Error'。/n- 'D' 重新加入队列。/n- 'E' 试图离开,但是他根本不在排队,输出 'Error'。/n- 第五次 'start' 时 'C, D' 上场。/n/n样例 $2$ 中,'A, B, C' 依次入队,操作合法,输出三个 'OK'。/n/n【数据范围】/n/n对于 $20/%$ 的数据,保证 $n=1$。/n/n对于 $40/%$ 的数据,保证 $n/le 2000$。/n/n对于另外 $20/%$ 的数据,保证没有 'leave' 操作。/n/n对于另外 $20/%$ 的数据,人名只有可能是单个大写字母。/n/n对于 $100/%$ 的数据,保证 $1 /le n/le 10^5$,人名仅含有大小写字母且长度不超过 $10$。/n/n本题输入输出量较大,请注意使用合理的输入输出方式。**c++代码内容:cpp/n#include <iostream>/n#include <queue>/n#include <unordered_set>/n#include <string>/nusing namespace std;/n/nint main() {/n int n;/n cin >> n;/n queue<string> q;/n unordered_set<string> playing;/n for (int i = 0; i < n; i++) {/n string event, name;/n cin >> event;/n if (event == /'start/') {/n if (q.empty()) {/n cout << /'Error/' << endl;/n } else {/n int size = min(2, (int)q.size());/n for (int j = 0; j < size; j++) {/n cout << q.front() << /' /';/n q.pop();/n }/n cout << endl;/n }/n } else if (event == /'arrive/') {/n cin >> name;/n if (playing.count(name) > 0 || q.size() >= 2) {/n cout << /'Error/' << endl;/n } else {/n q.push(name);/n cout << /'OK/' << endl;/n }/n } else if (event == /'leave/') {/n cin >> name;/n if (playing.count(name) == 0 || q.front() != name) {/n cout << /'Error/' << endl;/n } else {/n playing.erase(name);/n q.pop();/n cout << /'OK/' << endl;/n }/n }/n if (!q.empty()) {/n playing.insert(q.front());/n }/n }/n return 0;/n}/n/n

舞萌 DX 游戏机排队系统模拟

原文地址: https://www.cveoy.top/t/topic/qilT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录