题意:输入一串数值,且定下队列长度,依次输入数值,若达到最大存储范围,删去第一个数,在最后再存,若数值在队列中已经出现,则不需存下,若没有,则计数器加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;
}

看在我打了这么多的情况下,能否给个赞?