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 ...
随机推荐
- es6 - 箭头
class User { constructor(name, age) { this.name = name; this.age = age; } changeName(name) { this.na ...
- 身份证识别接口编写的JAVA调用示例
此java文章是基本聚合数据证件识别接口来演示,基本HTTP POST请求上传图片并接收JSON数据来处理. 使用前你需要通过 https://www.juhe.cn/docs/api/id/153 ...
- 【Python】导入类
导入单个类 随着不断添加类,可能会使文件变得很长,那么此时,需要将类存储在模块中,然后在主程序导入类即可 book.py class Book(): '''模拟一本书''' def __init__( ...
- jenkins构建一个go项目
Jenkins安装 最低配置: 不少于256M内存,不低于1G磁盘,jdk版本>=8 安装jdk1.8 yum install -y java-1.8.0-openjdk wget -O / ...
- 【翻译自mos文章】执行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误
执行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误. 适用于: Oracle Server - Ente ...
- 前端标签--js--css大致思路
html标签语言在块级和内联标签的基础上进行页面的设计,设计的时候主要是注意标签块间的距离位置等信息,设计盒子的浮动,盒子的位置,盒子之间的联系. 在设计网页之前一定要判断好该设计多少个盒子,什么样的 ...
- python coding style guide 的高速落地实践
python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...
- php 字符串内容是数组格式 转换成数组
一个简单的应用.. 例, $str = "array( 'USD'=>'1', 'GBP'=>'0.6494', 'EUR'=>'0.7668' ,'JPY'= ...
- WebRTC for android ios开发官方指南
The WebRTC native code package can be found at: https://chromium.googlesource.com/external/webrtc ht ...
- [ACM] HDU 1533 Going Home (二分图最小权匹配,KM算法)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...