# [競程] 聯合罷工 ###### tags: `競程` ## 問題 * ZeroJudge: [e579](https://zerojudge.tw/ShowProblem?problemid=e579) 一個社會研究組織採用了一組簡單的參數來模擬我們國家政黨運作的行為。參數之一是一個正整數 $h$,稱為罷會(hartal)參數,它表示同一個政黨兩次連續罷會的間隔天數。 考慮現在有三個政黨。假設 $h_1 = 3$, $h_2 = 4$, $h_3 = 8$,其中 $h_i$ 是第 $i$ 個政黨的罷會參數。現在,我們將模擬這三個政黨在 $N = 14$ 天的罷會行為。模擬的起始天一定是星期天,並假設在每週的假日(星期五和星期六)不會有任何罷會情形。只要有一個政黨罷會,那個工作天我們就會損失掉。 ![](https://hackmd.io/_uploads/B1rP1OAZo.png) 上面的模擬顯示,在14天內將會罷會5天(分別在第3、4、8、9和12天)。第6天沒有罷會,因為它屬於假日(星期五)。由此可知我們在2週內損失了5個工作天。 在這個問題中,考慮多個政黨的罷會參數陣列 $h$ 和模擬的總天數 $N$,我們需要計算出這 $N$ 天內我們因為罷會損失多少工作天。 ## 範例 ```python 輸入:N = 14, h = [3, 4, 8] 輸出:5 ``` ## 思路 使用一個長度為 $N$ 的`bool`陣列,`True`代表有罷工,`False`代表沒有罷工,最後再統計陣列上週五週六除外的罷工日,就是最後輸出的答案。注意**天數是從 1 開始計算**,且**第一天一定是星期天**這兩個條件。 ## 解答 :::spoiler Python 解答 ```python= def hartal(N, h): days = [False for _ in range(N)] for i in range(N): for hi in h: if (i + 1) % hi == 0: days[i] = True hartal_count = 0 for i in range(N): if (i + 1) % 7 != 6 and (i + 1) % 7 != 0: # 不是週五也不是週六 if days[i]: # 有罷工 hartal_count += 1 return hartal_count ``` :::