JSOI2010 缓存交换】的更多相关文章

BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心 Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除一个. 例如,当前Cache容量为3,且已经有编号为10和20的主存单元. 此时,CPU访问编号为10的主存单元,Cache命中. 接着,CPU访问编号为21的主存单元,那么只需将该主存单元移入Cache中,造成一次缺失(Cache M…
[BZOJ1826][JSOI2010]缓存交换(贪心) 题面 BZOJ 洛谷 题解 当缓存不满显然直接放进去,满了之后考虑拿走哪一个.不难发现拿走下一次出现时间最晚的那个一定不会更差. 那么用一个堆维护这个东西即可. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #…
1826: [JSOI2010]缓存交换 https://www.lydsy.com/JudgeOnline/problem.php?id=1826 分析: 简单的贪心,然后调啊调...最近怎么了,码力大大下降,各种奇奇怪怪的bug漫天飞,以后少熬夜. 贪心:每次pop一定是pop最远点的点. 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; inline int read() { ,f=;; +ch-…
bzoj1528[POI2005]sam-Toy Cars bzoj1826[JSOI2010]缓存交换 题意: Jasio有n个不同的玩具,它们都被放在了很高的架子上,地板上不会有超过k个玩具.当Jasio想玩地板上的其他玩具时,他会自己去拿,如果他想玩的玩具在架子上,他的妈妈则会帮他去拿,当她拿玩具的时候,顺便也会将一个地板上的玩具放上架子使得地板上有足够的空间.他的妈妈知道孩子的p个请求,求通过决定每次换玩具时换下哪个所能使他妈妈架子上拿玩具的次数的最小值.k≤100000,p≤50000…
这个题仔细一想可以直接贪心做,因为队列里下一个出现的早的一定最优.正确性显然.然后我只拿了50,我直接模拟另一个队列暴力修改最后一个点的nxt值,自然会T.但是其实不用修改,直接插入就行了前面的不影响后面的.然而只有80分,因为没有离散化. 题干: Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除一个. 例如,当前Cache容量为3,且已经有编号为…
细节题?...调了半天.... 可以发现,每一次从缓存中删除的主存一定是下次访问最晚的,可以用优先队列来处理...还有要离散化...还有链表末尾要多建一些点...否则会死的很惨... #include<cstdio> #include<iostream> #include<vector> #include<map> #include<queue> #define R register int using namespace std; inline…
虽然不知道为什么..但显然,每次扔掉离下次查询最远的内存单元就行了233 用堆来维护贪心...(优先队列大法好 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> #include<queue> #define d double using namespace…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1826 题意概括 Cache中有m个储存单元,接下来有n个访问地址,每个地址用一个数字表示.访问每一个地址,就要使用一次Cache的一个储存单元,当你选择某一个储存单元时,如果这个储存单元原来不是该地址,那么就发生一次遗失,并把该储存单元的值改为该地址:如果原来这个储存单元就是这个地址,那么不发生遗失且可以直接访问该地址.现在有n个地址访问请求依次输入,每次,你可以选择把地址放在哪一个存储单元,求…
题目链接:戳我 考虑一个贪心--就是每次我们都选择队列里面之后最晚加入的元素弹出. 维护一个nxt数组就行了. 特判一下之后不会再加入的元素. 代码如下: #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<queue> #define MAXN 200010 using namespace…
~~~题面~~~ 题解: 首先我们要使得Miss的次数尽量少,也就是要尽量保证每个点在被访问的时候,这个点已经存在于Cache中. 那么我们可以得到一个结论: 如果Cache已满,那么我们就从Cache里面取出下一个出现位置最远的那个数(如果不出现了那么令下一个出现位置为inf) 所以用堆维护即可. 我们记录一个Next[i],表示s[i]后面再次遇到s[i]的位置是哪,如果当前的s[i]就是最后一个s[i],那么Next[i] = inf 值得注意的是,遇到相同元素时我们并不需要从堆中删除上一…