Problem
給一個 $N \times N$ 的棋盤,放置城堡 (rook),城堡只能攻擊同行同列,這裡更特別一些,只能攻擊右下角位置。
下方是一個 $5 \times 5$ 範例,其中 R
表示城堡的位置,*
表示城堡可攻擊的格子,也就是範例的第三組測資。
|
|
保證輸入中城堡不會出現在同行同列,請問可攻擊的格子有多少個 (意即計算 *
的數量)。
Sample Input
|
|
Sample Output
|
|
Solution
很明顯地發現,答案是 所有城堡可攻擊數量總和 扣除 交集點數量 ,兩兩城堡最多一個交集點,並且交集點不會重疊 (不同行列的關係),而交集點只發生在逆序對中。因此找到逆序對總數,可以利用 D&C 的 merge sort 算法,或者套用 Binary indexed tree,利用掃描線思路找到逆序對。
|
|