Keep In Line

来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

又到饭点了,SK同学靠着惯性走到了食堂,但长长的队伍顿时让他失去了食欲。突然,他注意到某个窗口前的队伍里明显存在插队的现象,于是他默默记录下了同学们进队和出队的变化。
对于进队,SK同学只知道队伍里多了一个人,并不知道新来的人是老老实实站到了队尾还是插到了队伍里的某个位置;对于出队,SK同学能确定是队伍里站在最前面的人出队了。
初始时队伍为空,给出n条队伍进出的信息,保证已经出队的同学不会再入队,并且最终队伍也为空,现在SK同学想知道有多少不插队的好同学。

输入描述:

第一行是一个正整数T(≤ 5),表示测试数据的组数, 对于每组测试数据, 第一行是一个整数n(1≤ n ≤ 100000),表示这个队伍进出的信息数, 接下来n行,每行是两个字符串Opt Name,其中Opt为"in“代表进队,”out"代表出队,Name为进队或出队的人的名字, 所有信息按照时间顺序给出,名字由英文字母和阿拉伯数字组成,长度不超过10,保证每个人的名字各不相同。

输出描述:

对于每组测试数据,输出一行,包含一个整数,表示不插队的人数。

  • 示例1
  • 输入
1
6
in quailty
in hwq1352249
out hwq1352249
in zhuaiballl
out quailty
out zhuaiballl
  • 输出
2

AC:

#include <bits/stdc++.h>
#define maxn 100005
using namespace std;
map<string, int> mp;
string s[maxn];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T, n;
    cin >> T;
    while(T--)
    {
        string cur;
        mp.clear();
        queue<string> q;
        while(!q.empty())
        {
            q.pop();
        }
        cin >> n;
        int ans = 0;
        for (int i = 1; i <= n;i++)
        {
            cin >> cur;
            cin >> s[i];
            if(cur == "in")
                q.push(s[i]);
            else
            {
                while(mp[q.front()] == 1)
                {
                    q.pop();
                }
                if(s[i] == q.front())
                    ans++;
                mp[s[i]] = 1;
            }
        }
        cout << ans << endl;
    }
    return 0;
}

AC


补充:

map 的基本操作函数:

C++ Maps 是一种关联式容器,包含“关键字/值”对

begin()                  返回指向 map 头部的迭代器

clear()                 删除所有元素

count()                  返回指定元素出现的次数

empty()                 如果 map 为空则返回 true

end()                     返回指向 map 末尾的迭代器

equal_range()        返回特殊条目的迭代器对

erase()                   删除一个元素

find()                     查找一个元素

get_allocator()      返回map的配置器

insert()                  插入元素

key_comp()          返回比较元素key的函数

lower_bound()     返回键值>=给定元素的第一个位置

max_size()            返回可以容纳的最大元素个数

rbegin()                返回一个指向map尾部的逆向迭代器

rend()                   返回一个指向map头部的逆向迭代器

size()                    返回map中元素的个数

swap()                 交换两个map

upper_bound()    返回键值>给定元素的第一个位置

value_comp()       返回比较元素value的函数

摘自:w3cschool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值