此题数据量很小所以我使用的map来作为标记是否被选用,由于题目说了如果内存满了要抹去最开始的那个,所以我果断想到了队列
STL大法好啊,用起来真爽,下面是AC代码~
#include <iostream>
#include <map>
#include <queue>
using namespace std;
int M,N;//内存量和文章长度
queue<int > t;
map<int,int> f;//内存里面的值
int main()
{
cin>>M>>N;
int x;
int cnt=0;
for(int i=1;i<=N;i++)
{
cin>>x;
if(f[x]==0) //内存里面没有值,要到外村里面找值
{
if(t.size()>=M)//如果内存里面的数量大于M
{
f[t.front()]=0;//第一个抹去
t.pop();//弹出队列的第一个元素
t.push(x);
f[x]=1;//内存里面又有值了
}
else
{
f[x]=1;
t.push(x);
}
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}