堆——Operating System

题目链接

题目描述

在学习Operating System的过程中,Glory遇到了这样一个问题,现在有一个大小为可以容纳N个页面的内存,硬盘内的内容被分成M个页面,用1~M来标识,一开始内存里没有任何页面,接下来用户会请求Q个页面,你需要设计一个置换算法,使得缺页发生的次数最少。缺页是指用户请求某个编号的页面,但这个页面没有在内存中的情况。发生缺页之后,你必须要把硬盘内对应的页面调入内存中,如果内存已满,你需要置换掉当前内存中的某个页面。

输入描述

多组数据,请处理到输入结束。
每组数据,第一行为三个整数N,M,Q (0 < N,M,Q <= 50000)
接下来一行Q个数,表示用户请求的页面编号。

输出描述

对于每组数据,输出一个数,表示最少的缺页次数。

示例

输入

2 3 5
3 1 2 1 2
3 4 5
3 2 1 4 3

输出

3
4

分析

对于每个需要请求的页面,我们可以先找到它下一次再出现的位置,这样,在需要交换的时候,我们就可以先交换最后面才需要的页面,因此,我们可以用优先队列来解这道题,但需要注意的是,当遇到在队列中出现过的元素的时候,队列中相应元素所对应的下一个位置也需要进行更改。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 50010;
const int inf = 0x3f3f3f3f;
int nxt[maxn], a[maxn], vis[maxn], flag[maxn];
int n, m, s;

int main()
{
	while(cin >> n >> m >> s){
		priority_queue<pair<int, int> > q;
		memset(a, 0, sizeof(a));
		memset(nxt, inf, sizeof(nxt));
		memset(vis, 0, sizeof(vis));
		memset(flag, 0, sizeof(flag));
		for(int i = 1; i <= s; i++){
			cin >> a[i];
		}
		for(int i = s; i >= 1; i--){
			if(!vis[a[i]]){
				vis[a[i]] = i;
				nxt[i] = s + 1;
			}
			else{
				nxt[i] = vis[a[i]];
				vis[a[i]] = i;
			}
		}
		int ans = 0, num = 0;
		for(int i = 1; i <= s; i++){
			if(!flag[a[i]]){
				ans++;
				if(num == n){
					flag[q.top().second] = 0;
					q.pop();
					num--;
				}
				q.push(make_pair(nxt[i], a[i]));
				num++;
				flag[a[i]] = 1;
			}
			else{
				q.push(make_pair(nxt[i], a[i]));
			}
		}
		cout << ans << endl;
	}
	return 0;	
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 操作系统的三个组成部分是内核、文件系统和用户界面。 首先,内核是操作系统的核心部分,它负责管理计算机硬件资源,例如处理器、内存和设备驱动程序等。内核通过为不同的任务分配资源,确保它们在计算机系统有效地运行。它还提供了一些重要的功能,例如进程管理、内存管理和文件系统接口等。 其次,文件系统是操作系统一个重要组成部分。它负责管理计算机存储设备上的数据和文件。文件系统提供了对文件的组织、存储和访问的方式。它包括文件的层次结构、目录管理、文件保护和访问权限等功能。通过文件系统,用户可以方便地使用和管理存储在计算机上的文件和数据。 最后,用户界面是操作系统与用户之间的接口。它提供了一种用户与计算机系统进行交互的方式。用户界面可以是基于命令行的文本界面,也可以是基于图形的图形用户界面(GUI)。在命令行界面,用户通过输入命令来与计算机进行交互。而在图形用户界面,用户可以使用鼠标、键盘和其他输入设备通过图形菜单、图标和窗口等来进行操作。 总而言之,操作系统的三个组成部分——内核、文件系统和用户界面共同协作,确保计算机系统能够高效地运行和管理文件和数据,并为用户提供友好的交互方式。 ### 回答2: 操作系统由三个主要部分组成:内核、系统服务和用户接口。 内核是操作系统的核心部分,它负责管理计算机硬件资源并提供基本的系统功能。内核通过进程管理来管理系统运行的程序。它控制着程序的执行顺序、任务切换和资源分配等重要功能。内核还负责设备管理,包括与外部设备的通信和控制等。内核是操作系统最底层的组件,控制着操作系统的底层功能。 系统服务是操作系统的其他重要组成部分。它们提供了各种功能和服务,以支持用户的需求。系统服务包括文件系统、网络服务、安全服务等。文件系统负责管理计算机上的文件和目录,使用户能够方便地访问和管理文件。网络服务提供了计算机之间的通信和数据传输功能。安全服务主要负责保护系统和用户的数据安全,防止未授权访问或恶意攻击。 用户接口是用户与操作系统之间进行交互的方式。它使用户能够使用操作系统的功能和服务。用户接口可以分为图形用户界面(GUI)和命令行界面(CLI)。GUI使用图形元素(如图标、菜单、窗口等)来呈现操作系统的功能,使用户可以通过点击、拖放等方式来操作。CLI则是通过命令行来与操作系统进行交互,用户可以通过输入命令来执行操作系统的功能。 这三个部分共同构成了一个完整的操作系统。内核提供了基本的系统功能,系统服务提供了各种服务和功能,用户接口使用户能够与操作系统进行交互。通过合理地设计和组织这三个部分,操作系统能够提供高效、安全和方便的计算环境,满足用户的需求。 ### 回答3: 操作系统包含三个主要组成部分:内核、文件系统和用户界面。 首先,内核是操作系统的核心组件,负责管理计算机硬件和软件之间的通信。它控制和调度计算机的资源,包括处理器、内存和设备。内核还提供了一些基本的功能,如进程管理、内存管理、文件系统和网络通信等。内核与硬件直接交互,并向应用程序提供服务。它是操作系统的心,负责协调和控制所有其他组件。 其次,文件系统是操作系统与外部设备(如硬盘、光盘和闪存驱动器)交互的方式。它负责管理和组织文件和文件夹,并提供对这些文件进行读取、写入和删除等操作的接口。文件系统还负责处理文件的权限和安全性,确保用户只能访问其具有权限的文件。 最后,用户界面是操作系统和用户之间的接口。它提供了用户与计算机进行交互的方式,可以是命令行界面或图形用户界面。命令行界面要求用户通过键入命令来执行操作,而图形用户界面提供了直观的图形化界面,用户可以使用鼠标和键盘等设备来与计算机进行交互。用户界面使用户能够轻松地执行任务、访问文件和程序,以及配置计算机的设置。 这些组成部分共同工作,使操作系统能够有效地管理计算机的资源,并为用户提供友好的界面。操作系统是计算机的核心,使我们能够进行各种任务和应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值