解题思路
利用队列记录初始加入的队列顺序
再利用map<string,int>记录每个人是否在队列里面,如果在的话就为1,不在为0
匹配每次要out的人,只要out说明就不在队列里,那么对应的map就赋值为0
如果是在队伍头头,答案数++
后面再将队列头头为0的pop()掉,使其产生还在队伍里面的头头
代码
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n,su=0; cin>>n; queue<string> st; map<string,int>mp; string op,na; while(n--) { cin>>op>>na; mp[na]++; if(op=="in"){st.push(na);} else { mp[na]=0; if(st.front()==na)su++; while(st.size()&&!mp[st.front()])st.pop(); //注意前面要保证队列里有数才能pop(),不然会越界 } } cout<<su<<endl; } }