解题思路
利用队列记录初始加入的队列顺序
再利用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;
}
}

京公网安备 11010502036488号