题目原址:https://codeforces.com/contest/1234/problem/B2
题意:总共能显示k条消息框,多了的话会被顶掉,看原题样例很容易懂。
思路:用双向队列加map即可。
AC代码:
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 #include <deque>
6 #include <map>
7 using namespace std;
8 typedef long long ll;
9 map<ll,ll>mapp;
10 deque<ll>q;
11 void sol(){
12 int n,k;
13 cin>>n>>k;
14 ll num;
15 for(int i=1;i<=n;i++){
16 cin>>num;
17 if(!mapp[num]) {
18 q.push_front(num);
19 mapp[num]++;
20 }
21 if(q.size()>k) {
22 mapp[q.back()]=0;
23 q.pop_back();
24 }
25 }
26 cout<<q.size()<<endl;
27 while(!q.empty()){
28 cout<<q.front()<<" ";
29 q.pop_front();
30 }
31 }
32 int main(){
33 sol();
34 return 0;
35 }
知识兔这里用的双向队列以前去主动了解过,就不会写,就很难受。
还有在这里的 map ,是用的全局变量,所以其初始值都为 0 ,全局变量是会默认初始化为 0 的。