【输入输出样例1说明】 整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况: 空:内存初始状态为空。 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次词典。
【数据范围】 对于10%的数据有M=1,N≤5。 对于100%的数据有0≤100,0≤1000。
代碼實現:
#include<cstdio>
int n,m,a,b,c,ans,s[3000];
bool v[3000];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d",&a);
if(v[a]) continue;
if(!v[a]){
if(s[0]==n){v[s[++c]]=0;s[c]=a;v[a]=1;if(c==n) c=0;}
else{v[a]=1;s[++s[0]]=a;}
++ans;
}
}
printf("%d\n",ans);
return 0;
}
因為是數字,所以比較簡單。(其實字符的話,也可以用map)