JSOI2010 快取交換

2022-03-03 15:27:27 字數 594 閱讀 3475

考慮乙個貪心——就是每次我們都選擇佇列裡面之後最晚加入的元素彈出。

維護乙個nxt陣列就行了。

特判一下之後不會再加入的元素。

**如下:

#include#include#include#include#include#include#define maxn 200010

using namespace std;

int n,m,ans,cnt;

int a[maxn],pre[maxn],nxt[maxn],done[maxn],last[maxn];

priority_queue,less>q;

int main()

for(int i=1;i<=tot;i++) nxt[last[i]]=i+n,a[i+n]=i;

for(int i=1;i<=n;i++)

if(cnt>=m)

else cnt++;

ans++;

done[a[i]]=1;

q.push(nxt[i]);

}printf("%d\n",ans);

return 0;

}

JSOI2010 快取交換

當遇到需要將主存單元加進cache的時候,就看cache裡是否滿了,滿了的話,就刪除離最靠後的那乙個,這樣一定最優。但是網上部落格的 太長了。其實只需要判斷一下當前的優先佇列的top是否仍在cache中即可。重題 poi2005 sam toy cars,ac數 2 include include ...

JSOI2010 快取交換 貪心 堆

題面 題解 首先我們要使得miss的次數盡量少,也就是要盡量保證每個點在被訪問的時候,這個點已經存在於cache中。那麼我們可以得到乙個結論 如果cache已滿,那麼我們就從cache裡面取出下乙個出現位置最遠的那個數 如果不出現了那麼令下乙個出現位置為inf 所以用堆維護即可。我們記錄乙個next...

1826 JSOI2010 快取交換

在計算機中,cpu只能和快取記憶體cache直接交換資料。當所需的記憶體單元不在cache中時,則需要從主存裡把資料調入cache。此時,如果cache容量已滿,則必須先從中刪除乙個。例如,當前cache容量為3,且已經有編號為10和20的主存單元。此時,cpu訪問編號為10的主存單元,cache命...