题解 | #机器翻译#

机器翻译

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

// 思路:1、先判断该单词是否已经在内存里了

// 2、如果在,则直接continue,

// 3、如果不在,cnt直接++;并进一步判断:查看内存是否已经满了,在题中用m表示,m>0就 // 表示还没满,

// 4、没满就可以直接把该单词添加进内存,即放在数组里,并让a[x]=i,i代表时间,

// 5、如果满了,就遍历一遍数组把最小的找出来,(即i最小的)并让他的值变为0踢出去,

// 6、再把新的单词加进来即可。

// 7、最后输出cnt

using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int m,n;
int cnt=0; //cnt是查找的次数
int a[1020];
int main(){
    IOS;
    cin>>m>>n;
    for(int i=1;i<=n;i++){ //主意不要从 i=0;i<n;i++;因为我后面同时用i代表时间,i=0会带来麻烦,不然的话时间就不要用i
        int x;cin>>x;
        if(a[x]!=0)continue;
        cnt++;
        if(m>0){
             a[x]=i;//i是时间,通过时间去判断哪个单词是最早进入内存的    
             m--;
            }
        else{
            int minn=i,num=0;
            for(int j=0;j<=1000;j++){  //遍历数组找出进入内存时间最早的单词
                if(a[j]<minn && a[j]!=0){
                        minn=a[j];
                        num=j;
                    }
                }
                a[num]=0;
                a[x]=i;
        }
    }
    cout<<cnt;
}
全部评论

相关推荐

想润的芹菜人狠话不多:把其中一个老总放中间都会得罪另一个
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务