P1540. 机器翻译

考点

  • 模拟
  • 队列

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;
const int LEN = 1050;
int idx[LEN];
queue<int> q;

int main()
{
int m, n, in, ans = 0;
cin >> m >> n;
while (n--)
{
cin >> in;
if (idx[in])
continue;
++ans;
++idx[in];
q.emplace(in);
if (q.size() > m)
{
--idx[q.front()];
q.pop();
}
}
cout << ans;
return 0;
}

思路

根据题眼软件会清空最早进入内存的那个单词,满足先进先出的性质,选择队列进行操作即可

因为队列不方便遍历,所以新建数组idx记录对应数字在内存中的个数