Noi題庫 電池的壽命 特殊密碼鎖

2021-07-27 20:25:32 字數 1863 閱讀 8033

電池的壽命

描述 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池乙個能用5小時乙個能用3小時,那麼他只能玩3個小時的遊戲,有乙個電池剩下的電量無法使用,但是如果他有更多的電池,就可以更加充分地利用它們,比如他有三個電池分別能用3、3、5小時,他可以先使用兩節能用3個小時的電池,使用半個小時後再把其中乙個換成能使用5個小時的電池,兩個半小時後再把剩下的一節電池換成剛才換下的電池(那個電池還能用2.5個小時),這樣總共就可以使用5.5個小時,沒有一點浪費。

現在已知電池的數量和電池能夠使用的時間,請你找一種方案使得使用時間盡可能的長。

輸入 輸入包含多組資料。每組資料報括兩行,第一行是乙個整數n (2 ≤ n ≤ 1000),表示電池的數目,接下來一行是n個正整數表示電池能使用的時間。

輸出 對每組資料輸出一行,表示電池能使用的時間,保留到小數點後1位。

樣例輸入

2 3 5

3 3 3 5

樣例輸出

3.0

5.5思路:

分兩種情況,一種是其中乙個電池的電量大於其他電池電量之和,那這個電池可以和其他所有電池配合使用,使用總時間為其他電池的電量之和。另一種情況是最大電量的電池電量比其他所有電池電量之和小,它們總是可以配合使用將電量全部用完的,使用總時間為這些電池的總電量的一半。

題解(貪心):

#include

#include

using

namespace

std;

int main()

sum-=maxn;

if(sum<=maxn)

else

}return

0;}

———————————————我是華麗的分割線——————————————————-

特殊密碼鎖

描述 有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成(n<30),按鈕有凹/凸兩種狀態,用手按按鈕會改變其狀態。

然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。

當前密碼鎖狀態已知,需要解決的問題是,你至少需要按多少次按鈕,才能將密碼鎖轉變為所期望的目標狀態。

輸入 兩行,給出兩個由0、1組成的等長字串,表示當前/目標密碼鎖狀態,其中0代表凹,1代表凸。

輸出 至少需要進行的按按鈕操作次數,如果無法實現轉變,則輸出impossible。

樣例輸入

011

000

樣例輸出

1思路:

因為每次按按鈕都會改變當前位置和兩邊的數字,我們可以考慮從你需要改變的那個數字的後一位開始按,那麼你改變的序列前面不會改變,改變的只會是你後面的按鈕,這樣一直到最後判斷序列能否匹配就行了。(ps:第乙個按鈕按不按對結果會有影響,所以要分按第乙個按鈕和不按第乙個按鈕兩種情況取最小值)

題解(貪心):

#include

#include

using

namespace

std;

string x,y,s;

int n;

void change1(int i)

}void change2(int i)

}int main()

}s[0]^=1;

s[1]^=1;

for(int i=1;iif(s[i-1]!=y[i-1])

}if(x==y||s==y)

else

return

0;}

特殊密碼鎖

有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。當前密碼鎖狀態已知,需要解決的問題是,你至少需要按...

特殊密碼鎖

總時間限制 1000ms 記憶體限制 1024kb 描述 有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙...

特殊密碼鎖

例題四 特殊密碼鎖 描述有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。當前密碼鎖狀態已知,需要解...