P1540翻译机器

这是2010提高组第一题,是一个使用队列的模拟题(然而洛谷很多大佬用了最短路)

这道题首先要判断内存中是否已有解释(因为题目已经说了长度很小,所以可以用桶排序),没有的话便去外存找,找到后,存到内存的尾部。如果内存已经满了,那么弹出头部。所以,这道题一看就是要使用队列。然而我手写的队列不给力,最后看了题解用了STL才AC,心里很难受。

1.掌握队列的STL(size,front,pop,push)

2.注意看题目条件,不要老想着用循环判断一件事,想想其余方法,如桶排序,,

3.写选择语句时,尽量光写两个不一样的,具有共同点的写在一起。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stack>
#include<queue>
#define N 100001
using namespace std;
bool memory[N];
queue <int> q;
int m,n;
int dic;
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        if(memory[x]==true){
            continue;
        }
        else{
            if(q.size()>=m){
                memory[q.front()]=false;
                q.pop();
                q.push(x);
                dic++;
                memory[x]=true;
            }
            else{
                dic++;
                q.push(x);
            }
        }
    } 
    cout<<dic;
    cout<<endl;
    return 0;
}
待到oi十一月,我花开后百花杀。
原文地址:https://www.cnblogs.com/china-mjr/p/11238328.html