小公尺OJ 燈 仔細分析找規律

2021-09-10 23:21:30 字數 2280 閱讀 5037

乙個屋子有 n

nn 個開關控制著 n

nn 盞燈,但奇怪的是,每個開關對應的不是一盞燈,而是 n−1

n-1n−

1 盞燈,每次按下這個開關,其對應的 n−1

n-1n−

1 盞燈就會由亮變滅,或者由滅變亮。保證不會有兩個開關控制同樣的 n−1

n-1n−

1 盞燈。

現在劉同學想把燈全部開好,但是這些燈一開始的狀態非常亂,劉同學想知道最少需要按多少次開關才能使所有燈全部亮起。

單組資料輸入,每組資料一行,兩個數 n

nn,l

ll 分別代表燈的數量、最開始時亮著的燈的數量(1

<

l<

n<

10000000000

11<

l<

n<10

0000

0000

0)。每組資料輸出乙個數,即能使所有燈全部亮起的最少的按開關的次數,如果無法做到燈全部亮起,輸出「impossible

乙個開關控制n−1

n-1n−

1盞燈,一開始亮的燈有l

ll盞,滅的燈有n−l

n-ln−

l盞。你作為乙個操作的人,無非就是操作一盞亮的或者一盞滅的燈,你只有這兩種選擇。

亮 滅l

n−

l\begin 亮 & 滅\\ l & n-l \end

亮l​滅n−

l​那麼可以考慮下你的這兩種操作會帶來一種什麼樣的局面 亮滅n

−l+1

l−

1\begin 亮 & 滅\\ n-l+1 & l-1 \end

亮n−l+1

​滅l−

1​ 亮滅n

−l−1

l+

1\begin 亮 & 滅\\ n-l-1 & l+1 \end

亮n−l−1

​滅l+

1​這就是你操作任一一盞燈所會帶來的局面變化。那麼考慮下最終的局面,一定是這樣的。

亮 滅n

0\begin 亮 & 滅\\ n & 0 \end

亮n​滅0​

那麼我們是不是可以從最終局面反推出當前局面呢?是的可以,利用每種局面亮的燈的盞數;

n −l

+1=n

n−l−

1=

n\begin n-l + 1 =n\\ n-l-1 = n \end

n−l+1=

nn−l

−1=n

​解上面的兩個方程,可以把l

ll解出來,這個l

ll就是倒數第二個局面亮的燈的盞數,而且每次只有乙個方程有解,這就意味這,每次操作的燈是有明確次序的。

依次類推,可以求出從最終局面到目標局面亮的燈的盞數的乙個序列

n 1n

−23n

−4⋯1

2345

⋯\begin n & 1 & n -2 & 3 & n-4 & \cdots \\ 1 & 2 & 3 & 4 & 5 & \cdots \end

n1​12​

n−23

​34​

n−45

​⋯⋯​

現在l

ll就在這個序列中,我們要求的問題轉換成l

ll到n

nn要經歷多少步。

可以發現,n

nn的奇偶性可以影響整個序列有無偶數。

例如,n=4

n=4n=

4 4 12

3012

34

5\begin 4 & 1 & 2 & 3 & 0 \\ 1 & 2 & 3 & 4 & 5 \end

41​12​

23​3

4​05​n=

5n=5

n=5513

3151

2345

6\begin 5 & 1 & 3 & 3 & 1 & 5 \\ 1 & 2 & 3 & 4 & 5 & 6 \end

51​12​

33​3

4​15

​56​

通過n

nn的奇偶性,然後再考慮l

ll的奇偶性,就可以得出答案了。這在**中有體現,不再贅述。

#include

intmain()

return ret;}(

)<< std:

:endl;

}return0;

}

小公尺 oj 純位數

序號 101難度 非常難時間限制 2000ms記憶體限制 20m 描述在數學中,所謂 純位數 是指由相同位元重複而組成的自然數。比如在十進位制中,1,22,333,555 都是純位數。很顯然,15 在十進位制中不是乙個純位數,但是在二進位制 15 10 1111 2 卻是乙個純位數。乙個顯然的事實是...

小公尺OJ 119(小公尺兔跳格仔)

小公尺兔跳格仔 序號 119 難度 一般 時間限制 1000ms 記憶體限制 30m描述 公尺兔爸爸為了讓小公尺兔好好鍛鍊身體,便給小公尺兔設定了乙個挑戰 跳格仔。要吃到自己心愛的胡蘿蔔,小公尺兔需要跳過面前一些格仔。現有 n 個格仔,每個格仔內都寫上了乙個非負數,表示當前最多可以往前跳多少格,胡蘿...

小公尺OJ (136 小公尺兔的軌跡)

小公尺兔的軌跡 序號 136 難度 一般 時間限制 1000ms 記憶體限制 80m描述 有n m 的乙個矩陣,小公尺兔今天很開心,從矩陣左上角的第乙個位置開始順時針從外向裡走,很快就走遍了所有的位置,可是小公尺兔想知道自己走過的軌跡,你能告訴小公尺兔它走過的軌跡嗎?輸出乙個字串,由小公尺兔走過的位...