HZNUOJ 2119 Assassin的联络记录

Description

Assassin最近在和很多Servent、Master进行通信,用的通讯方式类似于我们在用的QQ。这个通讯软件和QQ有一个共同的功能就是一旦有消息发来,那么这个消息发来者的对话框会置顶。现在有一个比较棘手的事情摆在了Assassin的面前,那就是他想知道他收到所有人信息后,对话框的排列是怎样的。比如说A先发了一句,后来B也发了一句,那么此时的对话框排列是先B后A,此时如果A又发了一句,对话框的排列就变成了先A后B。

Input

先输入一个数t,代表总共有多少条消息发来。(t<=1000000)
接下来t行,每行输入一个字符串,代表消息发送者的名字

Output

输出接收完所有消息后对话框的排列顺序,一行一个人名

Samples

input Copy

7 saber archer saber caster Berserker saber saber

output Copy

saber Berserker caster archer

原题链接:HZNUOJ--Assassin的联络记录

解题思路:直接暴力的时间复杂度太大,会tle(本人亲测),所以只能找方法,我用了stl容器,刚好过了,思路看代码就能理解

ac代码:

#include <bits/stdc++.h>
using namespace std;
string s[1000010]; //字符串数组
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    unordered_set<string> s1;
    int t;
    cin >> t;
    for (int i=1;i<=t;i++)
    {
        cin >> s[i];
    }
    for (int i=t;i>=1;i--)
    {
        if(s1.find(s[i])==s1.end()) //如果在s1中没找到,就输出
        {
            cout << s[i] << endl; 
            s1.insert(s[i]);//将输出过的存入在s1中,下次再碰见就不会输出了
        }else continue;
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值