题解 | #机器翻译#

机器翻译

https://ac.nowcoder.com/acm/problem/16589

1.读入内存长度m和单词数量n;
2.for循环读入每个单词
如果这个单词不在内存中,查字典次数++
(1).如果内存满了,删掉先进去的元素,加入后进的元素
(2).如果内存没有满,加入后进去的元素,内存长度++
如果在内存中,不管他,读下一个
#include<bits/stdc++.h>
using namespace std;

int vis[1010];
//vis[21]=1表示21在内存中,vis[43]=0表示43不在内存中
int temp[1010];
//temp[1]=12表示输入的第一个数字是12,temp[4]=9表示输入的第4个数是9
int tempos=0;//记录temp数组的位置
int m,n;//记录内存空间大小和文章长度

int main()
{
    cin>>m>>n;
    int cnt=0,ans=0;//记录内存中数字个数和查字典次数
    int num,i;
    for(i=1; i<=n; i++)
    {
        cin>>num;
        if(vis[num]==1)continue;//这个数在内存里,不管它
        ans++;//不在内存里,要查一次字典
        if(cnt>=m)//内存满了
        {
            vis[temp[tempos-m]]=0;//把前面进入内存的删掉
            vis[num]=1;//标记新输入的已经有了
            temp[tempos++]=num;//放入新输入的

        }
        else  //内存没有满
        {

            vis[num]=1;//标记新输入的已经有了
            temp[tempos++]=num;//放入temp数组中
            cnt++;//内存中已有单词数+1
        }



    }
    cout<<ans;

    return 0;
}

全部评论

相关推荐

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

创作者周榜

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