傳說中,彥仁是一位能在競程界電爆全場的人,大家都稱他為「電人王」。然而,厲害的彥仁卻有一個天敵:蝴蝶。一旦蝴蝶出現在彥仁的身邊,他就得趕快跑走以避免被蝴蝶攻擊,形成奇觀之一:會跑的彥仁。
故事要從某一天彥仁來到了一個有許多蝴蝶的國家說起。這個國家有
具體來說,「探索」是指某個地區
蝴蝶為了避免迷路,它們的遷移路線會是單向的(也就是有起點和終點之分),並且每條遷移路線的終點都不同。另外,蝴蝶是很聰明的,他們探索的遷移路線絕對不會使得從一個地區能經由一些遷移路線飛回同一個地區,這樣就能確保不會有蝴蝶一直在某個圈子裡面飛不出來。
而「遷移」是指,某個地區
遷移中的蝴蝶對彥仁來說特別具有攻擊性。幸好彥仁有充足的消息來源,所以每當有一條新的遷移路線被探索出來,或者某個地方的蝴蝶開始遷移,彥仁都會收到消息。
請你寫一個程式,幫彥仁由這些消息判斷每一次蝴蝶遷移有沒有可能影響到他的所在地,以方便彥仁決定什麼時候要跑。
本題沒有輸入,如果你輸入了任何東西可能會導致各種不可預期的結果(?)。
請#include "lib2013.h"
之後實作下列三個函數。如果你的函數名稱不對或者長得不像下面那幾行,你將會獲得一個CE。
void init(int N);
:評分程式會首先呼叫這個函數,並傳入地區總數量
void explore(int a, int b);
:蝴蝶們剛探索了一條從
int run(int a, int b);
:
注意:如果你在程式裡實作了main()函式,你也會獲得一個CE。
在同一次執行中,init
只會被呼叫一次(也就是只有單筆測資)。
對於所有測資,run
和explore
的總次數。
子任務(測資) | 額外限制 | 分數 |
1 (0) | 每條遷移路線的起點都相同 | 1 |
2 (0~2) | 所有run的呼叫都在explore的呼叫之後 | 29 |
3 (3~5) | 呼叫explore的次數 |
16 |
4 (6~8) | 每條遷移路線的起點都不同 | 32 |
5 (9~11) | 每條新探索的遷移路線的終點在當下不會是其他遷移路線的起終點 | 34 |
6 (12~15) | 22 | |
7 (12~21) | 51 | |
8 (0~27) | 無 | 65 |
本題沒有輸出,如果你輸出了任何東西,你將會獲得一個WA。
5 8 1 2 3 1 0 1 2 0 2 2 2 3 2 3 2 1 2 4 1 0 2 2 0 4
0 1 0 1
5 6 2 1 2 1 0 3 1 0 4 2 3 4 1 3 2 2 0 2
0 0 1
這裡有一個測試用的標頭檔,可以用來測試。
該標頭檔接受以下輸入,數字間皆以空白分隔:
第一行:
接下來explore(a, b)
、run(a, b)
。
測試程式將會輸出每次呼叫run
的回傳值。
以下是一個保證格式正確(不會CE也不會RE、MLE)但只能讓你獲得1分的範例程式:
#include "lib2013.h" int s, q[1000000]; void init(int N) {} void explore(int a, int b) { s = a; q[b] = 1; } int run(int a, int b) { return s == a && q[b]; }
Problem Set / Description by Yihda Yol
建國中學106學年度校隊補選pD
No. | Testdata Range | Score |
---|---|---|
1 | 0 | 1 |
2 | 0~2 | 29 |
3 | 3~5 | 16 |
4 | 6~8 | 32 |
5 | 9~11 | 34 |
6 | 12~15 | 22 |
7 | 12~21 | 51 |
8 | 0~27 | 65 |