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
解题思路:直接暴力的时间复杂度太大,会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; }