2011百度之星初賽B圓環
阿新 • • 發佈:2020-10-20
這是百度之星2011初賽B中的第一道題,題目也很水,只要找到解題思路就OK了。。
題目:
時間限制:1000ms 描述 一個圓環上有n個位置,這n個位置按順時針依次標號為1, 2, …, n。初始時圓環的每個位置上都有一個1至n之間的整數,且每個整數只出現一次。 任何時刻,你可以將圓環上的數全部逆時針旋轉一個位置,即第i個位置上的數變為原來第i + 1個位置上的數,第n個位置上的數變為原來第1個位置上的數。也可以將圓環上的數全部順時針旋轉一個位置,即第i個位置上的數變為原來第i – 1個位置上的數,第1個位置上的數變為原來第n個位置上的數。另有一個裝置,可以交換圓環上第a個位置和第b個位置上的數。解法思路:
首先我們定義“連通”的概念:如果在圓環中的位置可以互換,則我們認為這兩個數是連通的。。。我們可以找到一個連通的一串數,則這串數中任意兩個數是可以互換的。(why?自己證明把,很簡單!)首先我們對每個數,找到他所屬於的連通分支,然後從小到大進行排序。。。最後如果這些數能夠組成連續的自然數,我們就認為這個圓環通過旋轉和交換,能夠使i的位置上的數是i。。
如圖:
程式碼實現起來很容易,其實我也沒寫,希望有時間的同學可以寫下。。。
轉載於:https://blog.51cto.com/canghailongteng/877986