题意:输入一串数值,且定下队列长度,依次输入数值,若达到最大存储范围,删去第一个数,在最后再存,若数值在队列中已经出现,则不需存下,若没有,则计数器加1,输出计数器的值。
本人完全按照题意来打代码,在此附上:
#include<bits/stdc++.h> using namespace std; int m,n,x,s,head,tail,q[10000005],c[1005];//s为计数器,q[]为队列,c用于判断输入值是否已经出现 int main(){ cin>>m>>n; for(int i=1;i<=n;++i){ cin>>x; if (c[x])continue; else{ ++s; if (tail-head>=m){ ++head; --c[q[head]]; } ++c[x]; q[++tail]=x; } } cout<<s<<endl; return 0; }
看在我打了这么多的情况下,能否给个赞?