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 ...
随机推荐
- Python爬虫爬取美剧网站
一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间.之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英剧等貌似就不在像以前一样同步更新了.但是,作为一个宅diao ...
- 利用MFC里面格式化函数也可以实现可变长度的问题
直接粘代码: 1: CString str1; //定义两个MFC里面的CString里面的字符串 2: CString str2; 3: str1.Format("(%d)", ...
- 如何将数据导入到hive中
可以通过多种方式将数据导入hive表 1.通过外部表导入 用户在hive上建external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表. ...
- C#各种导入Excel文件的数据的方法总结
在导入前都需要将上传的文件保存到服务器,所以避免重复的写这些代码,先贴出上传文件并保存到服务器指定路径的代码 protected void btnImport_Click(object sender, ...
- VueJS自定义过滤器:new Vue({filters:{filter1:function(){}....}})
Vue.js 允许你自定义过滤器,被用作一些常见的文本格式化. 语法 <!-- 在两个大括号中 --> {{ message | capitalize }} <!-- 在 v-bin ...
- 【转载】IIS与asp.net管道
阅读目录 asp.net是什么 HTTP协议 IIS与asp.net asp.net管道 参考资料 我们在基于asp.net开发web程序,基本上都是发布部署到安装了IIS的windows服务器上,然 ...
- RethinkDB创始人教你怎样找到创业点子
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1YmFpdGlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 如何在linux centos下安装git(转)
今天想开通github的服务,于是在服务器上安装git,百度到的结果千篇一律的全都有错误,给大家总结分享下. 如果yum install git可以直接安装的可以不通过源码编译安装. 源码安装步骤如下 ...
- ANDROID 推送到底哪家强(转)
之前在群里有同学问我关于推送的一些问题,解答之后我觉得这个话题还挺有用,因为几乎大部分人都会遇到这个问题,那姑且就写篇文章总结给你们吧. 1. 为什么要用推送? 推送功能可谓是现如今任何一个 App ...
- /usr/bin/mysqld_safe_helper: Cannot change uid/gid (errno: 1) (转)
From: https://www.rootusers.com/how-to-fix-mariadb-10-0-29-selinux-update-failure/ 安装mysql 10.0.29后, ...