cf 手机短信问题

时间:2022-11-18 18:36:33

题目:你有一部手机,最多显示k个人发的信息,现在收到n条信息,有可能人是相同的人发的。最新的要顶置,当屏幕上显示的人数已经有k个时,

如果此时又新的人发信息,则把显示屏末端的会消失,最新的顶置。

输入:第一行:n,k     n表示短信的条数,k表示屏幕最多显示的人的个数

         第二行:有n个数字,分别表示发短信的人,可以相同。

输出:求最终自顶向下显示在屏幕上的朋友

 

 

代码:

 #include<bits/stdc .h>
using namespace std;
set<int>s;
deque<int>m;
int main() {
 int n,k;
 cin>>n;
 cin>>k;
 for(int i=0; i<n; i ) {
  int j;
  cin>>j;
  if(!s.count(j)) {   
   m.push_front(j);
   s.insert(j);
  }
  if(m.size()>k) {
   s.erase(m.back());
   m.pop_back();
  }
 }
 
   for(int i=0;i<k;i )
 {
  cout<<m[i]<<" ";
 }
}

 

 

输入n k
for(1~n)  循环读入n个朋友
对于每个朋友x
首先用set的count函数set.count(x)判断之前有没有出现过
如果出现过,直接continue跳过,不做任何处理
如果没有出现过,把这个朋友x放入队头deque.push_front(x)
把这个数放入set,set.insert(x) 表示朋友x出现过,然后,
判断deque的size是否大于k,deque.size()
如果大于k,在set中删除deque的队尾那个数,set.erase(deque.back())
然后把deque队尾删除掉,deque.pop_back();
 最后输出deque