整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况:
空:内存初始状态为空。
1.1:查找单词 1 并调入内存。
2.1 2:查找单词 2 并调入内存。
3.1 2:在内存中找到单词 1。
4.1 2 5:查找单词 5 并调入内存。
5.2 5 4:查找单词 4 并调入内存替代单词 1。
6.2 5 4:在内存中找到单词 4。
7.5 4 1:查找单词 1 并调入内存替代单词 2。
共计查了 5 次词典。
思路:双端队列控制队列中不超过m个元素。
#include<bits/stdc++.h>
#include<queue>
#include<cstdio>
#include<iostream>
#define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
#define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
#define PER(i, a, b) for(int i = (a); i >= (b); -- i)
using namespace std;
const int maxn=1e3+10;
deque<int>que;
int p[maxn],tot,n,m;
inline int read()
{
char ch=getchar();
while(!(ch>=‘0‘&&ch<=‘9‘))ch=getchar();
int x=0;
while(ch>=‘0‘&&ch<=‘9‘){x=x*10+(ch-‘0‘);ch=getchar();}
return x;
}
int main()
{
m=read(),n=read();
REP(i, 1, n)cin>>p[i];
REP(i, 1, n){
if(find(que.begin(),que.end(),p[i])==que.end()){
if(que.size()<m)que.push_back(p[i]),tot++;
else que.pop_front(),que.push_back(p[i]),tot++;
}
}
cout<<tot<<endl;
}