题目链接: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]虚拟内存:模拟的更多相关文章

  1. 1206: [HNOI2005]虚拟内存 - BZOJ

    Description 操作系统中一种重要的存储管理技术就是虚拟内存技术.操作系统中允许进程同时运行,也就是并行.每个进程都有其相对独立的数据块(进程运行的过程中将对其进行读写操作).理想的情况下,这 ...

  2. BZOJ1206:[HNOI2005]虚拟内存

    我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  3. BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...

  4. bzoj 1202: [HNOI2005]狡猾的商人 并查集好题

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2946  Solved: 1384[Submit][Sta ...

  5. BZOJ 1199: [HNOI2005]汤姆的游戏 计算几何暴力

    1199: [HNOI2005]汤姆的游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  6. bzoj 1200: [HNOI2005]木梳 DP

    1200: [HNOI2005]木梳 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 266  Solved: 125[Submit][Status] ...

  7. bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] ...

  8. BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )

    好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...

  9. bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集

    [HNOI2005]数三角形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 349  Solved: 234[Submit][Status][Disc ...

随机推荐

  1. 用PHP调用证件识别接口识别本地图片

    前置条件 在开始前,请作如下准备:1.学会用PHP输出“Hello World” 2.去聚合数据申请证件识别专用的KEY:https://www.juhe.cn/docs/api/id/153 操作步 ...

  2. 5.2 calendar--通用日期的相关函数(3)

    prmonth(theyear, themonth, w=0, l=0) 打印指定年和月的日历.格式与formatmonth()函数一样. 样例: #python 3.4 import calenda ...

  3. 多媒体层预览(Media Layer OverView)

    音频模块位于多媒体层里.多媒体层包含了图形.音频.视频三种技术.这三种技术会给你带来声觉.视觉上的良好体验. 来看看ios的结构体系以及媒体层上的内容:                         ...

  4. Web安全系列(三):XSS 攻击进阶(挖掘漏洞)

    前言 在前些章节 (web安全系列(一):XSS 攻击基础及原理)以及(Web安全系列(二):XSS 攻击进阶(初探 XSS Payload))中,我详细介绍了 XSS 形成的原理以及 XSS 攻击的 ...

  5. 转:static关键字的总结

    static关键字的总结 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. ...

  6. 卸载gnu gcj

    麻辣个鸡的,我在Linux上安装的jkd版本是1.8,然后可能是之后安装了GCC吧,他大爷的,java版本变成了1.5.这个残酷的事实是在我写练习Package的测试文件的时候搞得. 机智的看了一下j ...

  7. Linux内核编译过程分析

    http://pan.baidu.com/s/1mgtACVu 其中是我总结生成的一些文档,以便于理解当我们输入make uImage后,系统是怎么一步一步生成uImage的,我采用的是逆向分析的方法 ...

  8. PHP中__get()和__set()的用法实例详解

    php面向对象_get(),_set()的用法 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__ge ...

  9. redis问题接囧办法及经验

    转自:https://my.oschina.net/freegeek/blog/324410 1.redis持久化,来自官方说明 如何选择使用哪种持久化方式? 一般来说, 如果想达到足以媲美 Post ...

  10. UVA 10428 - The Roots(牛顿迭代法)

    UVA 10428 - The Roots option=com_onlinejudge&Itemid=8&page=show_problem&category=494& ...