Codeforces Round #590 (Div. 3) B2. Social Network (hard version) (set中count())

題目鏈接

題意:

信息欄顯示問題,信息欄最多顯示k個,將依次出現n個信息:

新出現的信息如果不在信息欄中,則將最先在信息欄中的信息刪除,後將這條信息加入;

新出現的信息如果在信息欄中,則不做處理。

代碼如下:

#include<bits/stdc++.h>
using namespace std;
int a[200010];
int main(){
	int n,k,b,l=0,r=0;
	set<int>s;
	scanf("%d %d",&n,&k);
	for(int i=0;i<n;i++){
		scanf("%d",&b);
		if(!s.count(b)){
			if(r-l==k){
				s.erase(a[l]);
				l++;
			}
			a[r++]=b;
			s.insert(b);
		}
	}
	printf("%d\n",r-l);
	for(int i=r-1;i>l;i--){
		printf("%d ",a[i]);
	}
	printf("%d\n",a[l]);
	return 0;
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章