Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 289 - Wombats

Problem Statistics

Solved Member: 29  Submission: 310  User Tried: 31

Statement:

布里斯本現在已經被大量突變的袋熊(wombat)佔領,而你必須帶領人們到安全的地方。

布里斯本的道路是以大型網格(grid)的形式呈現。有R條東西向的水平道路,由北到南依序標示為0, ... ,(R – 1);另外有 C 條南北向的垂直道路,由西到東依序標示為 0, ... , (C – 1),如下圖所示。



袋熊由北方入侵,而人類則逃往南方。人類在水平方向的道路可以往東或往西逃跑,但是在垂直方向的道路只能往南方,也就是安全的地方前進。

水平道路 P 與垂直道路 Q 的交會處以 (P, Q) 表示。兩個交會處之間的道路區段(segment)會包含某數量的袋熊,這個數量會隨著時間而改變。你的任務是引導每個人從最北方(水平道路 0)的某個給定交會處,到達最南方(水平道路R – 1)的某個給定交會處,使他們行經的路線盡可能遇到最少數量的袋熊。

一開始會給定網格的大小以及每個道路區段的袋熊數量。接著你將會被給予一連串共E個事件,每個事件可能是:
  •改變(change),會更改某個道路區段的袋熊數量。
  •逃跑(escape),也就是某個人出現在水平道路0 的某個已給定交會處,而你必須找出一條路線到達水平道路 R – 1 的一個已給定交會處,使得途中盡可能遇到最少數量的袋熊。

Input:Output:

第一行有兩個以空白隔開的正整數R C,表示水平道路數與垂直道路數。

第二行開始有R行,每行為H[i][0] ... H[i][C – 2],其中H[P][Q]給定介於交會處(P, Q)與(P, Q + 1)的水平道路區段所包含的袋熊數量。若C = 1,不需要空白數行(第2行到第R + 1行)來表示在水平道路上的袋熊數量。

接下來有R-1行,每行為V[0][0] ... V[0][C – 1],其中V[P][Q]給定介於交會處(P, Q)與(P + 1, Q)的垂直道路區段所包含的袋熊數量。

接著是一個數字E,表示事件總數。

然後是E行事件的敘述,依照事件發生的順序,每個事件一行:

  •1 P Q W,表示介於交會處(P, Q)與(P, Q + 1)之間的水平道路區段的袋熊數量變更為W。
  •2 P Q W,表示介於交會處(P, Q)與(P + 1, Q)之間的垂直道路區段的袋熊數量變更為W。
  •3 V1 V2,要你輸出計算當一個人由交會處 (0, V1) 行進到 (R – 1, V2) 時,至少一定會遇到的袋熊數量。

對於第一種事件的限制:
  •P:指出哪個水平道路被影響(0 ≤ P ≤ R – 1)。
  •Q:指出區段位於哪兩個垂直道路之間(0 ≤ Q ≤ C – 2)。

對於第二種事件的限制:
  •P:指出哪個水平道路被影響(0 ≤ P ≤ R – 2)。
  •Q:指出區段位於哪兩個垂直道路之間(0 ≤ Q ≤ C – 1)。

對於第三種事件的限制:
  •V1:指出這個人從水平道路 0 的哪個地方開始出現(0 ≤ V1 ≤ C – 1)。
  •V2:指出這個人最後出現在水平道路 (R – 1) 的哪個地方(0 ≤ V2 ≤ C –1)。

輸入限制:
  •2 ≤ R ≤ 5,000
  •1 ≤ C≤ 100
  •最多500次改變(事件1與事件2的總數)
  •最多200,000 次 escape(事件3的總數)
  •在任何時間在任何區段最多 1,000 隻袋熊

子任務配分額外輸入限制
19C = 1
212R, C ≤ 20,且不會有改變的事件
316R, C≤ 100, 並且最多有 100 次 escape
418C = 2
521+24=45C ≤ 100


考慮不影響正確性,且第六組的測試資料不太合理又太花時間,故在此刪除第六組測試資料。 @ 2013/10/27 01:39 by hanhan0912
對於每個逃跑事件(即第三種事件),輸出一個數字於一行表示答案。

Sample Input:Sample Output:

3 4
0 2 5
7 1 1
0 4 0
0 0 0 2
0 3 4 7
5
3 2 1
3 3 3
2 0 0 5
1 1 1 6
3 2 1
2
7
5

HINT:



上圖顯示水平道路數量R = 3 以及垂直道路數量 C = 4 的一個初始地圖,每個道路區段皆標示了該區段的袋熊數量。考量以下的連續事件:
 •一個人出現在交會處A = (0, 2),並且希望逃到交會處 B = (2, 1)。她遇到的袋熊數量最少可以是 2,如虛線所示。
 •另一個人出現在交會處 X = (0, 3),並且希望逃到交會處Y = (2, 3)。他遇到的袋熊數量最少可以是 7,同樣如虛線所示。
 •兩個改變的事件產生:垂直道路 0 最頂端區段的袋熊數量更改為 5,而水平道路1 中間區段的袋熊數量更改為 6,詳見下圖圈起來的數字。



 •第三個人出現在交會處 A = (0, 2),並且希望逃到交會處 B = (2, 1)。現在她遇到的袋熊數量最少會是 5,如新的虛線所示。

Source:

IOI 2013

Problem Setter

Testdata:

TestTimeMemoryScore
03000ms262144kb
1-13000ms262144kb9
1-23000ms262144kb
1-33000ms262144kb
1-43000ms262144kb
1-53000ms262144kb
1-63000ms262144kb
1-73000ms262144kb
1-83000ms262144kb
2-15000ms262144kb12
2-25000ms262144kb
2-35000ms262144kb
2-45000ms262144kb
2-55000ms262144kb
2-65000ms262144kb
2-75000ms262144kb
2-85000ms262144kb
2-95000ms262144kb
3-110000ms262144kb16
3-210000ms262144kb
3-310000ms262144kb
3-410000ms262144kb
3-510000ms262144kb
3-620000ms262144kb
4-15000ms262144kb18
4-25000ms262144kb
4-35000ms262144kb
4-45000ms262144kb
5-115000ms262144kb45
5-215000ms262144kb
5-315000ms262144kb
5-415000ms262144kb