ETH官方钱包

切換
舊版
前往
大廳
主題

ZeroJudge - c237: 旅行者_九國遊歷記<2> 小澄去猿國 解題心得

Not In My Back Yard | 2020-07-15 00:51:49 | 巴幣 0 | 人氣 139

題目連結(jié):


題目大意:
第一列給定 18 個整數(shù),代表 18 個村子在 0 時的各自人數(shù)(人數(shù)不超過 10000000,且村子編號為 1 ~ 18)。

接著的一列給定一整數(shù) m (0 ≦ m ≦ 300000),代表有 m 筆人流的紀錄。緊接著有 m 列輸入,每列給定四整數(shù) v 、 t 、 p 、 d (1 ≦ v ≦ 18 , 1 ≦ t ≦ 24 , 0 ≦ p ≦ 1000 , d = 1 或 2),代表編號 v 的村子在 t 時回來或離開了 p 個人,其中 d = 1 時代表離開、 d = 2 時代表回來。

再接著有一列輸入給定一整數(shù) q (0 ≦ q ≦ 300000),代表有 q 筆詢問。接下來有 q 列輸入,每列給定三整數(shù) v1 、 v2 、 t (1 ≦ v1 、 v2 ≦ 18 , 1 ≦ t ≦ 24),代表詢問編號 v1(含) ~ v2(含) 的村子在 t 時總共有多少人?

針對每筆詢問輸出於一列。



範例輸入:
10 12 16 20 45 63 21 25 16 32 23 16 20 25 31 21 12 15
5
1 1 3 2
2 4 6 2
1 5 7 1
3 6 9 2
5 12 12 2
3
1 3 5
2 4 6
1 18 24


範例輸出:
40
63
446


解題思維:
把那 m 個人流資訊,先分時段再分村子(反過來也可以)儲存,也就是這些資訊會集中到一個二維陣列 M 裡。而該陣列裡的每個位置 Mi, j,對應到 i 時村子 j 的人數(shù)「變化量」。

m 筆資料都處理完之後,才把總變化量加到各個村子(各個時段還是要各自獨立的)。然後使用前綴和(Prefix Sums)的概念,如此題。因為有 24 個時段,所以分成 24 個獨立前綴和數(shù)列。然後根據(jù)給定的 t ,去找時段 t 對應到的前綴和數(shù)列,然後使用 v1 、 v2 在 O(1) 時間得到所求。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作