周賽 戰域 題解(優先佇列 思維 貪心)

2021-10-04 06:33:34 字數 1054 閱讀 6717

將x+1後函式的差值放入優先佇列,每次的話就貪心選最小的,然後再更新差值放入佇列中維護。

其實說白了就是把m分為m次加1,每次都貪心選擇最小的那份。

但是結構體每次使用後都要改變,每次sort都會用時間。而優先佇列可以解決這個問題

優先佇列是stl中比較重要的乙個部分,用起來非常方便,在很多排序題中要比sort一遍一遍排序快很多。

它能根據自己定義順序來進行排序。

主要的兩種表達形式(其實還有其他的,這裡就先列舉兩個):

第一種是用friend bool operator來寫:

#include#includeusing namespace std;

#includetypedef struct node

}point;

第二種是用bool operator來寫。

#include#includeusing namespace std;

#includetypedef struct node

}point;

要注意的是上面的兩種都是從小到大來排順序!!程式裡面的大於小於號返回的是相反的。

大於號是從小到大排序,小於是從大到小排序,自己定義優先順序的時候一定要注意,跟其他地方的不太一樣,記住就好了。

注:第二種方法更好

易錯警示

注意就算x=0也有 c 值,一定不要忘記,wa了無數發

#include#includeusing namespace std;

typedef long long ll;

int n,m,u,v,w;

ll ans;

struct node

}fx;

priority_queuepq;

int main());

ans=ans+w;

}while(m--));

}printf("%lld",ans);

return 0;

}

參考鏈結

XDU校賽F(貪心 優先佇列)

既然代主席叫窩寫題解,窩當然得好好寫辣。原題 思路 其實最主要的問題是在記憶體滿的時候將誰彈出,也就是讓留在記憶體裡面的頁面盡可能得發揮作用。怎麼發揮作用?反正碰到相同頁面的能發揮作用了嘛。對記憶體裡面的所有頁面找里他下乙個相同頁面,刪除的時候當然是刪除下乙個頁面最遠的那個啦。然後貌似不太靠譜?可能...

2018CCPC網路賽A(優先佇列,思維)

include using namespace std priority queue q int main q.push 賣出 tmp x q.top first 如果前面沒有比它更小的,相當於放進去乙個標記為1的 如果有比它更小的,相當於執行買賣 if q.top second 1 除了第一次進佇...

題解 優先佇列優化貪心 CF2C

因為處理這個問號的時候具有不確定性,所以我們乾脆把所有的問號在一開始的時候全部初始化成右括號,這個時候再來看如果右括號多了,就可以把一些問號變成的右括號轉換成左括號,這個操作的代價就是 a i b i a i b i 分別表示把第 i 個括號換成左括號和右括號的代價,那麼就把所有的問號都用這種形式放...