1. 程式人生 > 其它 >2021 ICPC Gran Premio de Mexico 2da Fecha部分題題解

2021 ICPC Gran Premio de Mexico 2da Fecha部分題題解

前面的水題,在隊友的配合下,很快就拿下了,剩下幾道大毒瘤題,一直罰座三個小時,好讓人自閉...但不得不說,這些題的質量是真的高!

H. Haunted House

首先看這個題,大眼一掃,覺得是某種資料結構的題,之後就把思考的重心放在瞭如何快速判斷某個人會在哪個屋子遇到鬼上,由於鬼的活躍期會不定時的更新(指的是當一個鬼嚇到一個人之後就會立即休眠,它的週期也會隨即發生變化),發現這個東西真的很難維護,讓人找鬼感覺做不了。...害,思路一旦僵住之後,路就走窄了...其實我們可以再看看這個題的資料範圍,因為一個題的資料範圍的特性往往會提示本題的解決方法。我們發現一個事情,首先每個鬼的精力是一個排列,如果按照我們剛才的想法,完全沒有這個必要啊。還有發現人進來的時刻\(t\leq10^5\)

,為什麼這個時間也給得這麼小,如果在最後的演算法和時間t沒關係的話,大可以給個\(1e9\)啊。所以這個時候,我們就可以嘗試轉換下思路。維護鬼的狀態,有點多,不妨我們維護人,讓鬼去抓人。人的資訊很簡單就是進來的時間,我們對鬼進行操作。這個時候就要思考怎麼讓鬼抓人,如果我們總的去列舉時間的話,那麼同一時刻會有多個人同時進入不同的屋子,這個貌似也很難搞。相比較於人一個一個的進入,我們不妨將所有人一起進入,只是他們的時間不同了。也就是說之前我們的想法就是他們一個一個的走全部的屋子,現在我們要讓他們一起走第一個屋子,一起走第二個屋子,...這樣的話,對於鬼的狀態我們就能很輕鬆的維護。他們一起走,第一個鬼攔住一部分人,第二個鬼攔住一部分人,...直到最後一個鬼。思考發現這和題意是等價的。我們列舉每個鬼的活躍期,進行阻攔,然後,如果有人在其活躍期內,則直接更新該鬼的狀態。發現每個鬼的活躍期的個數為\(\frac{m}{x}\)
,m表示我們列舉總的時間,注意x是個排列,那麼這裡的複雜度就為\(mlogm\),這裡的m為總的時間,m取2e,用set再方便不過了,總的複雜度就為\(MlogMlogN\).