机器翻译

 原题链接:https://www.luogu.org/problem/show?pid=1540#sub

再顺手切掉一道大水题。

内存池实际上可以看作一个长度为M的队列,手写就好。

用一个find函数遍历内存池,如果找到曾经存过的单词就返回true,否则返回false。

内存池内所有元素初始化为-1,这点很关键。

然后每次输入单词,都去内存池find这个单词,如果找不到,那就应该把这个单词加进去,如果队列满了,那就把队首指针再拨回1即可(即循环队列)。

最后输出ans。

 1 #include <iostream>
 2 #define maxn 10005
 3 using namespace std;
 4 int n,m,a[maxn];
 5 int k=1,ans,word;
 6 bool find(int x){
 7     bool b = false;
 8     for (int i=1;i<=m;i++)
 9         if (a[i] == x){
10             b = true;
11             break;
12         }
13     return b;
14 }
15 
16 int main(){
17     cin >> m >> n;
18     for (int i=1;i<=m;i++)
19         a[i] = -1;
20     for (int i=1;i<=n;i++){
21         cin >> word;
22         if (!find(word)){
23             a[k] = word;
24             k++;
25             ans++;
26         }
27         if (k>m)
28             k = 1;
29     }
30     cout << ans << endl;
31     return 0;
32 }
原文地址:https://www.cnblogs.com/OIerShawnZhou/p/7496891.html