top1编程
← 返回题目
题解

机器翻译

1 条题解

  • 0
    @ 2026-7-29 0:22:10
    #include <iostream>
    #include <queue>
    #include <set>
    using namespace std;
    
    int main() {
        int M, N;
        cin >> M >> N;
    
        queue<int> memory;      // 存储单词的进入顺序(先进先出)
        set<int> in_memory;     // 快速判断单词是否在内存中
        int count = 0;          // 查词典次数
    
        for (int i = 0; i < N; i++) {
            int word;
            cin >> word;
    
            // 判断是否已在内存中
            if (in_memory.find(word) != in_memory.end()) {
                continue;  // 已存在,无需查词典
            }
    
            // 未在内存中,必须查词典
            count++;
    
            // 内存未满:直接加入
            if (memory.size() < M) {
                memory.push(word);
                in_memory.insert(word);
            } else {
                // 内存已满:移除最早进入的单词(队首)
                int oldest = memory.front();
                memory.pop();
                in_memory.erase(oldest);
    
                // 插入新单词
                memory.push(word);
                in_memory.insert(word);
            }
        }
    
        cout << count << endl;
    
        return 0;
    }
    
    • 1