AcWing 496. 机器翻译
原题链接
简单
仅供自己学习思考
#include<iostream>
#include<queue>
using namespace std;
const int N = 1010;
int m, n;
class Queue{
public: //public class显式声明这是一个公有的类.即对任何成员可见
int q[N], front = 0, rear = 0; //仅是class隐式声明(缺省也就是默认情况下的)
void Init(){ //初始化队列
rear = -1; //让尾指针指向0的后面以便压入新的元素
}
void push(int x){
q[++ rear] = x; //因为rear初始值为-1,先加一,再压入x
}
void pop(){
front ++; //队头指针向上加一,从逻辑上队头元素就被删除了
} //队列默认队头指针指向的元素为第一个元素
int find(int x){
for (int i = front; i <= rear; i ++){ //从头到尾扫描这个队列
if (q[i] == x) return i; //返回这个
}
return -1;
}
int size(){
return rear - front + 1;
}
};
int main(){
int cnt = 0; //计数器
cin >> m >> n;
Queue q; //引用队列
q.Init(); //初始化队列
for (int i = 0; i < n; i ++){
int x;
cin >> x;
if (q.find(x) == -1){ //队列里没有x
q.push(x);
cnt ++;
}
if (q.size() > m) q.pop(); //队列长度超过容量
}
cout << cnt << endl;
return 0;
}