前往
大廳
主題

ZeroJudge - b844: 一堆按鈕 解題心得

Not In My Back Yard | 2021-02-11 00:00:01 | 巴幣 0 | 人氣 255

題目連結:


題目大意:
一開始所有按鈕上的數字都是 0 。每當按下一個編號為 K 之按鈕,就會把該按鈕以及其後之按鈕(K + 1 、 K + 2 、……)上的數字是 0 的改成 1 、 1 改成 0 。

輸入有多筆測試資料,每筆佔三列。測資第一列給定兩正整數 N 、 Q (N ≦ 500000 , Q ≦ 200000),代表按下 N 個按鈕以及有 Q 筆的詢問。接著第二列給定 N 個正整數 K (K ≦ 2147483647),代表每次按按鈕之按鈕編號。最後第三列給定 Q 個正整數 P,試問按鈕 P 上的數字為 0 還是 1 (此時已經按完 N 次按鈕)?



範例輸入:
5 3
3 1 3 2 8
3 6 9


範例輸出:
0
0
1


解題思維:
因為詢問是在按完 N 次按鈕後,所以按按鈕的次序完全不重要。所以我們將每次按按鈕之編號由小排到大變為陣列 S。

由此一來我們可以看到去找 S 中有多少數字小於 P 時(假設有 C 個數字小於 P),這些數字恰好會使得按鈕 P 改變狀態(0 變 1 、1 變 0)。因此當 C 為奇數時,表示按鈕 P 上的數字應為 1;反之 C 為偶數時,按鈕 P 的數字應為 0。

而要找到 C 的值只需要執行二分搜尋法(Binary Search)去找 S 中第一個大於 P 之值位於何處即可得知。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作