005. 机器翻译
原题链接:P1540 [NOIP2010 提高组] 机器翻译
解题思路:
开一个数组 \(a[n]\) 全部初始化为0,用来标记数字 \(x\) 是否在内存中,如果在就标记为1,如果要从内存删除就标记为0,然后开一个数组\(b[n]\) 手搓队列(先进先出的数据结构)(当然这里用SQL也可以),这个队列用来表示内存满了的时候查字典应该替换谁(先进入内存的单词)
AC代码:
#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;int a[10010], b[10010], cnt = 0;int main()
{memset(a, 0, 10010); //初始化int m, n;cin >> m >> n;int temp;while(n--){ cin >> temp;if(a[temp] == 0) //判断是否在内存中{a[temp] = 1; //存入内存b[cnt] = temp; //进入队列if(cnt >= m) a[b[cnt - m]] = 0; //如果内存满了就将先存入的单词标记为0 cnt++; //计数}}cout << cnt;return 0;
}