利用一个数组,下标为要存的数,数值为每次存储的顺序。例如样例中,当1为下标时,存储时数值为1;当2为下标时,存储时数值为2;当5为下标时,存储时数值为4······
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n,a[1011]={0},x,i,j,su=0;//记得要赋初值!!!!!!!
cin>>m>>n;
for(i=1;i<=n;i++)
{
cin>>x;
if(a[x]!=0)continue;//说明已经存入数组
su++;
if(m!=0){a[x]=i;m--;}//说明内存中还有空间
else //内存无空间,开始替换
{
int mi=i,pos=0;
for(j=0;j<=1000;j++)
{
if(a[j]!=0&&a[j]<mi){mi=a[j];pos=j;}//找到内存中最先存入的数
}
a[pos]=0;a[x]=i;
}
}
cout<<su;
}

京公网安备 11010502036488号