『壹』 藍橋杯2021年第十二屆國賽真題-和與乘積
藍橋杯2021年第十二屆國賽真題要求我們解決一個關於數列的問題:給定一個整數數列 A = (a1, a2, ..., an),計算滿足區間內元素乘積等於和的區間的個數,即存在某個區間 [L, R],滿足 aL * aL+1 * ... * aR = aL + aL+1 + ... + aR。
輸入部分包括兩個步驟:首先,讀取一個整數 n,表示數列的長度;接著,讀入 n 個整數,表示數列的元素。輸出則是一個整數,表示滿足條件的區間個數。
解題思路涉及構建三個同步數組:one[]、num[] 和 onone[]。one[] 用於記錄每個非1元素前連續1的數量,num[] 存儲每個非1元素前所有1的數量累加,onone[] 則是直接存儲非1的數。通過累乘和累和的對比,我們可以找出滿足條件的區間。具體來說,計算 (num[j] - num[i - 1] - one[i]) 代表至少包含兩個數的乘積和和,然後根據左右兩側1的數量與d(乘積與和的差值)的比較,確定符合條件的區間數量。
總結來說,代碼中通過巧妙的數組操作和判斷條件,實現了對區間乘積等於和的計數,對於數列中每個元素組合的處理都十分精確。理解了這些步驟,你應該能夠透徹理解題目的解題方法。