提交状态:排队中。。。交了好几次就是不知道测的结果是啥。不过示例过了,凑合一下。
题还挺麻烦的,主要是英文不够⑥。其实看明白了也不复杂,可以想象这样的实际场景:你手机上的后台应用给你推送消息,同一个应用不管推送多少条消息,后台只有一条提示,而且后台可以显示的总的应用个数时有限制的。题意描述的就是这种场景,所以很自然就想到用一个队列来存放后台消息,当有该应用消息时状态不变,没有该应用消息并且可显示窗口没有满就加入队列,如果满了就把最早的那一条删掉。
该题还有升级版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; }
