洛谷P2827 NOIP2016 提高組 蚯蚓

2022-08-20 23:21:12 字數 1334 閱讀 6966

題鏈

最長的蚯蚓被砍兩截之後,其餘的蚯蚓長度會增加,與其加其餘蚯蚓不如對這兩隻蚯蚓操作,可定義乙個buff表示其餘蚯蚓需要增加多少長度,當拿出最長的那只蚯蚓時,就需要加上buff,當然被剪斷的變成兩條就需要減去當前buff再壓入佇列,保證下次拿出來時加上buff是應有的長度;

乙個佇列存原陣列,另外兩個佇列分別存砍斷的蚯蚓的兩部分,可知這兩個佇列是遞減的,所以普通佇列就行;

//#pragma gcc optimize("o2")

#include using namespace std;

//#include//using namespace __gnu_cxx;

//#include //using namespace __gnu_pbds;

#define combine pair, greater, pairing_heap_tag

#define ll long long

#define ll long long

#define pair pair#define ull unsigned long long

#define ls rt<<1

#define rs rt<<1|1

#define one first

#define two second

#define ms 7000009

#define inf 1e9

#define dbinf 1e100

#define pi acos(-1.0)

#define eps 1e-9

#define mod 1000000007

#define mod1 39989

#define mod2 1000000000

ll n,m;

ll ac[ms];

ll p[ms];

priority_queue,less> qq;

queueq[3];

stacksta;

int which()

int main()

sort(p+1,p+n+1);

for(int i=n;i>=1;i--)

ll buff = 0;

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

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

cout << endl;

for(int i=0;i<=2;i++)

while(!q[i].empty())

for(int i=1;!qq.empty();i++)

cout << endl;

return 0;

}

洛谷P2827,NOIP2016 蚯蚓

傳送門 考慮優先佇列 但是蚯蚓的長度是變化的,如果每一次操作都修改所有蚯蚓的長度,必然超時.但是每一次所有蚯蚓中,只有被斬斷生成的兩個沒有 q,其它所有蚯蚓長度均 q.不難想到,用優先佇列 兩個值 len表示被壓入優先佇列時的長度,t表示被壓入優先佇列的時間,如果當前時間為i,那麼當前蚯蚓的實際長度...

洛谷P2827 NOIP2016 蚯蚓

題目描述 輸入 輸出 思路分析 70分寫法 看到每次取出最大值,第一眼想到的就是優先佇列,我們可以每一次取完隊首元素後將其分開後兩段的長度進行計算,再放入佇列之中即可 但題目中要求,除被切開的蚯蚓外,其餘蚯蚓長度要變長,每次把隊中元素取出並加上q再放入隊中?不用說我們也知道這是不行的,那我們可以 考...

P2827 NOIP2016 提高組 佇列

題意 傳送門 p2827 noip2016 提高組 蚯蚓 題解容易想到使用二叉堆維護長度的最大值,由於每次新產生之外的蚯蚓長度都增加 q qq,而難以修改已經在堆中的元素,那麼對新產生的蚯蚓長度減 q qq,可以使長度的相互關係保持不變。時間複雜度 o m log n o m log n o mlo...