NOIP2010 提高组] 机器翻译

模拟 · 例3-机器翻译

https://ac.nowcoder.com/acm/contest/20960/1003

alt alt

本题通过简单枚举来进行解决

翻译软件中只能存储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;
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务