NOIP2010 提高组] 机器翻译
模拟 · 例3-机器翻译
https://ac.nowcoder.com/acm/contest/20960/1003
本题通过简单枚举来进行解决
翻译软件中只能存储m个单词,而我现在有n个单词。
对于前m个单词,只需判断是否重复即可,对于m之后的单词需要判断是否重复,如果重复就不再查询,如果不重复就要查询,并且把最早查询的单词踢出内存,然后存入新单词。
首先设置一个变量ant来统计查询次数,设置一个x来表示现在正要查询的单词。设置一个a数组来存储查询的单词*
代码如下
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
int ant = 0;
int x;
vector<int>a(1001, 0);
for (int i = 1;i <= n;i++)
{
cin >> x;
if (a[x] != 0) continue; //如果a[x]不为0代表该单词在内存中无需查询
ant++;//没在内存中则查询次数加一
if(a[x]==0)
{
if (m > 0) //内存尚未填满
{
a[x] = i;//a【x】来记录该单词出现的时机
m--;//内存减少
}
else
{
int minn = i, pos = 0;
for (int j = 0;j <= 1001;j++)
{
if (a[j] != 0 && minn > a[j])//a[j]!=0是因为单词是从1开始的
{
minn = a[j];//记录下在内存中出现的最早的单词
pos = j;//把它出现的时机存储下来
}
}
a[pos] = 0;//让这个单词离开内存
a[x] = i;//把新来的加进去
}
}
}
cout << ant << endl;
}
