题目原址: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 的。