邏輯電路 (APCS 2024-01 中高級)

1.0s 256M

請設計一個程式,模擬一個基本的邏輯電路系統。這個電路由輸入端口、邏輯閘及輸出端口組成。你需要模擬訊號傳遞與邏輯閘運算,求出所有輸出端口的數值,並計算電路的最大延遲時間。

電路包含下列元件:

  • 輸入端口:共有 \(p\) 個,編號為 \(1\) 到 \(p\)。每個輸入值為 \(0\) 或 \(1\)。
  • 邏輯閘:共有 \(q\) 個,編號為 \(p+1\) 到 \(p+q\)。閘的類型如下:
    • 類型 \(1\),AND:兩個輸入都是 \(1\) 時輸出 \(1\),否則輸出 \(0\)。
    • 類型 \(2\),OR:至少一個輸入是 \(1\) 時輸出 \(1\),否則輸出 \(0\)。
    • 類型 \(3\),XOR:兩個輸入不同時輸出 \(1\),否則輸出 \(0\)。
    • 類型 \(4\),NOT:只有一個輸入,輸出為該輸入的反值。
  • 輸出端口:共有 \(r\) 個,編號為 \(p+q+1\) 到 \(p+q+r\)。每個輸出端口接收一個訊號。

電路中的每條連接線都有方向。最大延遲時間是:在所有從輸入端口到輸出端口的路徑中,路徑經過的邏輯閘數量最大值。輸入端口與輸出端口本身不計入。

輸入格式

第一行包含四個整數 \(p,q,r,m\),依序代表輸入端口、邏輯閘、輸出端口及連接線的數量。

第二行包含 \(p\) 個整數 \(v_1,v_2,\ldots,v_p\),依序為各輸入端口的值。

第三行包含 \(q\) 個整數 \(t_1,t_2,\ldots,t_q\),其中 \(t_i\) 是編號 \(p+i\) 的邏輯閘類型。

接下來 \(m\) 行,每行包含兩個整數 \(a,b\),表示一條從元件 \(a\) 指向元件 \(b\) 的連接線。

限制

  • \(1\le p\le 10^3\)
  • \(1\le q\le 5\times 10^4\)
  • \(1\le r\le 10^3\)
  • 每個 AND、OR、XOR 閘恰有兩條輸入線;每個 NOT 閘恰有一條輸入線。
  • 每個輸出端口恰有一條輸入線。
  • 每個輸入端口及每個邏輯閘的輸出,會連到至少 \(1\) 個、至多 \(20\) 個其他邏輯閘或輸出端口。
  • 電路不會形成迴路。
  • 測試資料保證最大延遲時間不超過 \(100\)。

輸出格式

第一行輸出一個整數,表示電路的最大延遲時間。

第二行依編號由小到大輸出 \(r\) 個以空白分隔的整數,表示各輸出端口的值。

評分說明

本題共有 \(20\) 筆計分測試資料,每筆 \(5\) 分。

子題 分數 額外限制
1 40 \(p+q+r\le 10^3\)
2 60 無額外限制

範例輸入 1

4 5 4 13
1 0 1 0
1 2 3 4 1
1 5
2 5
2 6
3 6
3 7
4 7
4 8
5 10
6 9
6 11
7 9
8 13
9 12

範例輸出 1

2
0 1 1 1

範例輸入 2

5 6 4 15
1 1 0 1 0
2 1 3 4 1 3
1 6
2 7
7 13
7 6
3 7
3 8
4 8
5 9
8 10
9 10
10 14
10 11
9 11
6 12
11 15

範例輸出 2

3
1 0 1 0

題目來源

APCS 2024 年 1 月實作題第 3 題,ZeroJudge m933 邏輯電路

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。