提交状态:排队中。。。交了好几次就是不知道测的结果是啥。不过示例过了,凑合一下。
题还挺麻烦的,主要是英文不够⑥。其实看明白了也不复杂,可以想象这样的实际场景:你手机上的后台应用给你推送消息,同一个应用不管推送多少条消息,后台只有一条提示,而且后台可以显示的总的应用个数时有限制的。题意描述的就是这种场景,所以很自然就想到用一个队列来存放后台消息,当有该应用消息时状态不变,没有该应用消息并且可显示窗口没有满就加入队列,如果满了就把最早的那一条删掉。
该题还有升级版B2. Social Network (hard version),就是修改了约束条件如下:
消息数量可能是之前那种情况的1000倍,不知道按照同一种处理方式会不会超时或者超内存,服务器根本就不响应提交结果。
#include <iostream>
#include <vector>
#include <cstring>
#include <string>
#include <deque>
#include <unordered_set>
#include <stack>
using namespace std;
typedef long long LL;
class SocialNetWork {
public:
deque<LL> Q;
void func(vector<LL>& message, LL limit) {
for (auto mem:message) {
if (S.count(mem))
continue;
else {
if (Q.size() < limit) {
S.insert(mem);
Q.push_back(mem);
}else {
S.erase(Q.front());
Q.pop_front();
S.insert(mem);
Q.push_back(mem);
}
}
}
}
private:
unordered_set<LL> S;
};
int main()
{
LL n, k;
cin >> n >> k;
vector<LL> V(n,0);
for (LL i = 0; i < n; i++) {
cin >> V[i];
}
SocialNetWork api;
api.func(V,k);
cout << api.Q.size() << endl;
while (!api.Q.empty()) {
cout << api.Q.back()<<" ";
api.Q.pop_back();
}
return 0;
}