ETH官方钱包

前往
大廳
主題

ZeroJudge - d166: 反轉(zhuǎn)表 解題心得

Not In My Back Yard | 2021-04-24 00:00:13 | 巴幣 0 | 人氣 491

題目連結(jié):


題目大意:
對(duì)於一個(gè)為數(shù)字 1 ~ m 這 m 個(gè)數(shù)字的一種排列之?dāng)?shù)列 A1 、 A2 、 …… 、 Am,其反轉(zhuǎn)表 B1 、 B2 、 …… 、 Bm 的項(xiàng)次 Bi 定義為:在數(shù)列 A 裡,排在數(shù)字 i 前面(假設(shè)數(shù)字 i 為 Aj,則為 A1 ~ Aj-1)有多少數(shù)字比它大。

現(xiàn)在輸入有多列,每列給定若干個(gè)數(shù)字(以一列只含 -1 的輸入作結(jié)),代表著一個(gè)數(shù)列之反轉(zhuǎn)表。試問原數(shù)列 A 為何?



範(fàn)例輸入:
2 3 6 4 0 2 2 1 0

-1


範(fàn)例輸出:
5 9 1 8 2 6 4 7 3


解題思維:
首先因?yàn)檩斎氲母袷接悬c(diǎn)神祕(可以從範(fàn)例輸入看到),所以我們需要一列一列讀,然後看該列輸入有沒有數(shù)字。有的話就將那些數(shù)字?jǐn)X取出來。如果只擷取出一個(gè) -1 ,則代表輸入結(jié)束。

然後根據(jù)題意 B1 代表著數(shù)字 1 (1 不一定在 A1 喔)前面的數(shù)字有 B1 個(gè)大於它。而其他項(xiàng)次也是則同理。

因此,我們可以藉由暴力法去搜尋每個(gè)數(shù)字應(yīng)放在哪。以範(fàn)例輸入 2 3 6 4 0 2 2 1 0 為例:
一開始數(shù)列 A 預(yù)設(shè)為空,如下
_ _ _ _ _ _ _ _ _
有 9 個(gè)格子(因?yàn)楣?fàn)例有 9 個(gè)數(shù)字)

2 3 6 4 0 2 2 1 0
2 代表著數(shù)字 1 前面有 2 個(gè)數(shù)字比它大,所以
_ _ 1 _ _ _ _ _ _

2 3 6 4 0 2 2 1 0
3 代表著數(shù)字 2 前面有 3 個(gè)數(shù)字比它大,所以
_ _ 1 _ 2 _ _ _ _
(基本上就是數(shù)空格的數(shù)量,因?yàn)榻酉聛硭褜さ臄?shù)字一定比 2 大。所以 2 現(xiàn)在放的位置前面有 3 個(gè)空格,因而放在那裡)

2 3 6 4 0 2 2 1 0
6 代表著數(shù)字 3 前面有 6 個(gè)數(shù)字比它大,所以
_ _ 1 _ 2 _ _ _ 3

2 3 6 4 0 2 2 1 0
4 代表著數(shù)字 4 前面有 4 個(gè)數(shù)字比它大,所以
_ _ 1 _ 2 _ 4 _ 3

2 3 6 4 0 2 2 1 0
0 代表著數(shù)字 5 前面有 0 個(gè)數(shù)字比它大,所以
5 _ 1 _ 2 _ 4 _ 3

2 3 6 4 0 2 2 1 0
2 代表著數(shù)字 6 前面有 2 個(gè)數(shù)字比它大,所以
5 _ 1 _ 2 6 4 _ 3

2 3 6 4 0 2 2 1 0
2 代表著數(shù)字 7 前面有 2 個(gè)數(shù)字比它大,所以
5 _ 1 _ 2 6 4 7 3

2 3 6 4 0 2 2 1 0
1 代表著數(shù)字 8 前面有 1 個(gè)數(shù)字比它大,所以
5 _ 1 8 2 6 4 7 3

2 3 6 4 0 2 2 1 0
0 代表著數(shù)字 9 前面有 0 個(gè)數(shù)字比它大,所以
5 9 1 8 2 6 4 7 3

因此所求數(shù)列 A 為 5 9 1 8 2 6 4 7 3。而其他的情況也可以按照類似以上之步驟推出所求。




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

創(chuàng)作回應(yīng)

更多創(chuàng)作