- 用vector模拟内存
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
vector<int> v;
int res=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(find(v.begin(), v.end(),x) == v.end())
{
res++;
v.push_back(x);
}
if(v.size()>m) v.erase(v.begin());
}
cout<<res;
return 0;
}
- 数组模拟队列
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1010;
int a[N],b[N];
int main()
{
int m,n;
cin>>m>>n;
int res=0;
int hh=0,tt=-1;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(!a[x])
{
res++;
a[x]=1;
b[++ tt]=x;
if(tt - hh + 1 > m ) a[b[hh ++]] = 0;
}
}
cout<<res;
return 0;
}
- 直接使用STL里的
queue
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 1010;
int a[N],b[N];
queue<int> q;
int main()
{
int m,n;
cin>>m>>n;
int res=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(!a[x])
{
res++;
a[x]=1;
q.push(x);
if(q.size() > m) {
int t=q.front();
a[t]=0;
q.pop();
}
}
}
cout<<res;
return 0;
}