虚拟内存

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

内存中的数据以页为基本存储单位,进程的读写操作都针对页来进行。实际内存空间被分割成 nn 页,虚拟内存空间的页数往往要多得多。某一时刻,进程需要访问虚存编号为 PP 的页,该算法的执行步骤如下:

a. 首先在内存中查找,如果该页位于内存中,查找成功,转d,否则继续下面的操作;

b. 寻找内存中是否存在空页(即没有装载任何数据页的页面),若有,则从外存中读入要查找页,并将该页送至内存中的空页进行存储,然后转d,否则继续下面的操作;

c. 在内存中寻找一个访问次数最少的页面(如果存在多个页面的访问次数同时为最少,则选取最早读入数据进入内存的那个页面),从外存中读入要查找页,替换该页。

d. 结束

所谓访问次数是指从当前页面进入内存到该时刻被访问的次数,如果该页面以前进入过内存并被其它页面替换,那么前面的访问次数不应计入这个时刻的访问次数中。

你的任务是设计一个程序实现上述算法。

测试数据将会提供 mm 条读写内存的命令,每条命题提供要求访问的虚拟内存页的编号 PP 。你的程序要求能够模拟整个 mm 条命令的全部执行过程,所有的命令是按照输入的先后执行的,最开始的时候内存中的 nn 页全为空。

输入格式

文件第1行为 n (n<104)n \space (n<10^4) m (m<106)m \space (m<10^6),分别表示内存页数和读写内存命令条数。

下一行有 mm 个正整数 Pi (Pi109)P_ i \space (P_i \leq 10^9),表示第 ii 条读写内存命令需要访问的虚拟内存页的编号。

输出格式

输出仅包含一个正整数,表示在整个模拟过程中,在内存中直接查找成功的次数(即上面的算法只执行步骤a的次数)。

样例 #1

样例输入 #1

3 8 
1 1 2 3 4 2 5 4

样例输出 #1

1

数据结构探索

未参加
状态
已结束
规则
IOI
题目
15
开始于
2023-11-28 17:15
结束于
2024-1-9 9:15
持续时间
1000 小时
主持人
参赛人数
39