【题目来源】
https://www.lanqiao.cn/problems/1113/learning/
【题目描述】
CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M 次操作,操作有四种类型,如下:
• IN name V:表示一名叫 name 的用户到 VIP 窗口排队
• OUT V:表示 VIP 窗口队头的用户离开排队
• IN name N:表示一名叫 name 的用户到普通窗口排队
• OUT N:表示普通窗口队头的用户离开排队
求 M 次操作结束后 VIP 窗囗队列和普通窗囗队列中的姓名。
【输入格式】
第一行是一个整数 M(1≤M≤1000),表示一共有 M 次操作。
第二行到第 M+1 行输入操作,格式如下:
• IN name V
• OUT V
• IN name N
• OUT N
【输出格式】
输出 M 次操作后 VIP 窗囗队列和普通窗囗队列中的姓名(从头到尾),先输出 VIP 窗口队列后输出普通窗囗队列。
【输入样例】
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
【输出样例】
Adel
CLZ
laozhao
【算法分析】
● 若队列的元素为字符串,则各字符串的长度可以不同。
● C++ 中的字符串比较方法
在C++中,可以使用标准库中的 string 类来进行字符串的比较。
string 类重载了比较运算符,使得可以使用关系运算符(==,!=,<,>,<=,>=)来比较两个字符串。
#include <bits/stdc++.h>
using namespace std;int main() {string s1;string s2;while(1) {cin>>s1>>s2;if(s1==s2) cout<<"=="<<endl;else if(s1>s2) cout<<">"<<endl;else if(s1<s2) cout<<"<"<<endl;}return 0;
}
【算法代码】
#include <bits/stdc++.h>
using namespace std;const int maxn=1005;
string vip[maxn];
string cmn[maxn];
int h1,t1=-1,h2,t2=-1;
string op,name;
char type;int main() {int n;cin>>n;while(n--) {cin>>op;if(op=="IN") {cin>>name>>type;if(type=='V') vip[++t1]=name;else cmn[++t2]=name;} else {cin>>type;if(type=='V') h1++;else h2++;}}while(t1!=h1-1) {cout<<vip[h1]<<endl;h1++;}while(t2!=h2-1) {cout<<cmn[h2]<<endl;h2++;}return 0;
}/*
in:
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ Vout:
Adel
CLZ
laozhao
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/144042212
https://blog.csdn.net/hnjzsyjyj/article/details/144043961
https://blog.csdn.net/hnjzsyjyj/article/details/144051312
https://blog.csdn.net/hnjzsyjyj/article/details/144043154
https://blog.csdn.net/hnjzsyjyj/article/details/133636109