題目:
思路...
用優先佇列模擬做的話,時間主要消耗在每次的排序上;
能不能不要每次排序呢?
關注先後被砍的兩條蚯蚓 x 和 y,發現砍完以後,它們的兩部分對應還滿足原來的大小關係!
從兩條蚯蚓出發,可以推知所有蚯蚓砍完以後的兩部分還對應滿足原來的大小關係;
但兩部分之間就不一定了;
所以開三個佇列,分別記錄原來的蚯蚓,砍後第一部分的蚯蚓,砍後第二部分的蚯蚓;
每次取三個佇列中最長的蚯蚓砍,砍出來的兩部分對應加到砍後的兩個佇列裡;
即使是又砍了已經被砍過的蚯蚓,把它模擬成原來的蚯蚓,也滿足剛才的那種做法;
於是這題就a了;
有不少細節呢,而且注意要開 long long !以後應該對這些敏感一點;
由這題得到的經驗是,遇到關於詢問大小關係,沒有規律,需要不斷排序的問題的時候,關注相鄰的兩個量的變化關係,也許能有意想不到的發現。
**如下:
#include#include#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;queue
int> >q1,q2,q3;
priority_queue
ans;
intconst maxn=1e5+5
;int
n,m,q,u,v,t,a[maxn];
intmain()
printf("\n
");for(int i=1;i<=n+m;i++)
return0;
}
洛谷P2827 蚯蚓
本題中,我們將用符號 lfloor c rfloor 表示對 c 向下取整,例如 lfloor 3.0 rfloor lfloor 3.1 rfloor lfloor 3.9 rfloor 3 蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現...
洛谷p2827蚯蚓題解
題目 演算法標籤裡的演算法什麼的都不會啊 什麼二叉堆?qbxt出去學習的時候講的,一段時間之前做的,現在才寫到部落格上的 維護3個佇列,佇列1表示最開始的蚯蚓,佇列2表示每一次被切的蚯蚓被分開的較長的那一部分,佇列3表示每一次被切的蚯蚓被分開的較短的那一部分。我們先把原序列排序,因為不管怎麼切,先被...
蚯蚓 P2827 蚯蚓
本題中,我們將用符號 c lfloor c rfloor c 表示對c向下取整,例如 3.0 3.1 3.9 3 lfloor 3.0 rfloor lfloor 3.1 rfloor lfloor 3.9 rfloor 3 3 0 3.1 3 9 3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓...