w4 P1540 [NOIP2010 提高组] 机器翻译
主要思路:因为题目要求内存满后要扔出最先进去的单词,于是就想到用queue。每查找一次要查找的单词是否已在内存内,不在则查找次数+1,把单词放入内存,同时内存大小+1。然后判断此时的内存大小是否超出给定大小,超出则pop,为超出则继续。
代码如下:
#include<iostream>
#include<queue>
using namespace std;
int N,M,ans,tmp; //ans为查词典次数,tmp为当前内存大小
int flag[1010]; //记录单词是否在内存内
int main()
{
queue<int> q;
cin>>M>>N;
for(int i=0;i<N;++i){
int word; //要查找的单词
cin>>word;
if(flag[word]==0){ //若单词不在内存内
ans++; //查词典次数+1
q.push(word); //把单词放入内存
tmp++; //内存大小+1
flag[word]=1; //记录单词已在内存内
}
else if(flag[word]==1){ //要查找的单词不在内存内
continue;
}
if(tmp>M){ //判断当前内存是否已经超出给定大小
flag[q.front()]=0; //记录被扔出单词不在内存内
q.pop(); //扔出单词
tmp--; //内存大小-1
}
}
cout<<ans<<endl;
return 0;
}