BZOJ 1206 [HNOI2005]虚拟内存:模拟
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1206
题意:
内存大小为n(外存无限大),共有m次访问,每一次访问的信息编号为p。
对于每一条信息,不在内存中,就在外存中。
内存和外存的访问速度不同。为了提高整体的访问速度,有这样一种内存管理的算法:
(1)如果p在内存中,直接访问,算法结束。否则转步骤(2)。
(2)如果内存有剩余空间,则将p由外存转移到内存中来,算法结束。否则转步骤(3)。
(3)选出内存中访问次数最少的一条信息(访问次数相同选进入内存时间早的),用p将它替换掉,算法结束。
访问次数是指:某条信息从进入内存的那一刻开始一直到现在的访问次数。(如果之前进入过内存,然后又被替换掉了,那么之前的访问次数不算)
问你在内存中直接访问到p的次数。(即执行步骤(1)的次数)
题解:
模拟。
用STL中map和set神器~~~
map映射:p的编号idx -> (p的访问次数cnt, p进入内存的时间tim)
set:(idx, cnt, tim) 排序优先级:先cnt,后tim。(均取小)
map用来查询p是否在内存中,以及有关p的信息(以便在set中定位到相应元素)
set用来作优先队列(可任意插入和删除元素),队首为内存中访问次数最少(或进入内存最早)的一条信息。
map和set分别保证了在log(N)时间内的查找和删除(替换)信息。
总复杂度为O(m * log(n))。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
#include <set> using namespace std; struct Pro
{
int idx;
int cnt;
int tim;
Pro(int _idx,int _cnt,int _tim)
{
idx=_idx;
cnt=_cnt;
tim=_tim;
}
Pro(){}
friend bool operator < (const Pro &a,const Pro &b)
{
return a.cnt!=b.cnt?a.cnt<b.cnt:a.tim<b.tim;
}
}; int n,m,p;
int ans=;
map<int,pair<int,int> > mp;
set<Pro> st; int main()
{
cin>>n>>m;
for(int i=;i<m;i++)
{
cin>>p;
map<int,pair<int,int> >::iterator it_mp=mp.find(p);
if(it_mp!=mp.end())
{
int cnt=(it_mp->second).first;
int tim=(it_mp->second).second;
st.erase(Pro(p,cnt,tim));
st.insert(Pro(p,cnt+,tim));
mp[p]=pair<int,int>(cnt+,tim);
ans++;
}
else if(mp.size()<n)
{
mp.insert(pair<int,pair<int,int> >(p,pair<int,int>(,i)));
st.insert(Pro(p,,i));
}
else
{
set<Pro>::iterator it_st=st.begin();
int idx=it_st->idx;
int cnt=it_st->cnt;
int tim=it_st->tim;
mp.erase(idx);
st.erase(it_st);
mp.insert(pair<int,pair<int,int> >(p,pair<int,int>(,i)));
st.insert(Pro(p,,i));
}
}
cout<<ans<<endl;
}
BZOJ 1206 [HNOI2005]虚拟内存:模拟的更多相关文章
- 1206: [HNOI2005]虚拟内存 - BZOJ
Description 操作系统中一种重要的存储管理技术就是虚拟内存技术.操作系统中允许进程同时运行,也就是并行.每个进程都有其相对独立的数据块(进程运行的过程中将对其进行读写操作).理想的情况下,这 ...
- BZOJ1206:[HNOI2005]虚拟内存
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...
- BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...
- bzoj 1202: [HNOI2005]狡猾的商人 并查集好题
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2946 Solved: 1384[Submit][Sta ...
- BZOJ 1199: [HNOI2005]汤姆的游戏 计算几何暴力
1199: [HNOI2005]汤姆的游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- bzoj 1200: [HNOI2005]木梳 DP
1200: [HNOI2005]木梳 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 266 Solved: 125[Submit][Status] ...
- bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1116 Solved: 292[Submit][Status] ...
- BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )
好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...
- bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集
[HNOI2005]数三角形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 349 Solved: 234[Submit][Status][Disc ...
随机推荐
- 各类免费的API接口分享,无限次
各类免费的API接口分享: 手机号码归属地API:https://www.juhe.cn/docs/api/id/11 历史上的今天API:https://www.juhe.cn/docs/api/i ...
- python 查询,子查询以及1对多查询
1.添加数据: # 方法1:对象.save() book = Book(**kwargs) book.save() # 方法2:类.create(**kwargs) Book.create(**kwa ...
- koajs 项目实战(一)
(一)koa 1.Koa(koajs)-- 基于 Node.js 平台的下一代 web 开发框架 koa1 npm install koa -g npm install koa-generator ...
- apue学习笔记(第九章 进程关系)
本章将详细地说明进程组以及POSIX.1引入的会话的概念.还将介绍登录shell和所有从登录shell启动的进程之间的关系 终端登录 BSD终端登录.系统管理者创建通常名为/etc/ttys的文件,其 ...
- [水]ZOJ1201
给原排列 求 其前面有多少个数比他大. 给每一个数1...2..n前面有多少个数比他大,求原序列 第一个直接统计 第二个从1開始找出第inv[i]+1个空位置放进去就好 printf里的format ...
- 王立平--eclipse中改动android项目的版本
改动版本 1.右键-->properties 2.android.改动须要的版本 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQyNTU ...
- mysql 让一个存储过程定时作业的代码(转)
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...
- 双向数据绑定---AngularJS的基本原理学习
Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作. AngularJS非 ...
- asp.net core 系列之Reponse caching之cache in-memory (2)
这篇文章(主要翻译于官网,水平有限,见谅)讲解asp.net core 中的 Cache in-memory (内存缓存). Cache in-memory in ASP.NET Core Cachi ...
- YARN/MRv2 中基本术语介绍
YARN/MRv2是下一代MapReduce框架(见Hadoop-0.23.0),该框架完全不同于当前的MapReduce框架,它在扩展性,容错性和通用性等方面更出色,据统计,Yarn有超过15000 ...