POJ特殊密碼鎖

2021-07-28 07:46:31 字數 1179 閱讀 6971

總時間限制: 

1000ms 

記憶體限制: 

1024kb

描述

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

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

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

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

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

樣例輸入

011

000

樣例輸出

1

貪心演算法

貪心策略是,保證前面的都匹配,對於位置i,如果不匹配,就按下i+1位置的按鈕(這樣可以保證i位置前面的正確),最後判一下是否匹配即可。 

另外,對於0位置是否修改需要再討論,所以這個貪心要跑兩次。

別人的簡單做法:#include #include #include using namespace std;

string s,t,fin;

int tmp=0,ans=1e9,n;

inline void flip(int i)

int main()

{ destlock=lock=orilock=0;//int型變數

cin>>line;//原狀態

int n=line.size();

for(int i=0;i>line;//期望狀態

for(int i=0;line[i];i++)

setbit(destlock,i,line[i]-'0');

int mintimes=1<<30; //2^30很大的值

for(int p=0;p<2;p++){//p代表最左邊的按鈕

lock=orilock;

int times=0;

int curbutton=p;

for(int i=0;i0)

flipbit(lock,i-1);

flipbit(lock,i);

if(i

特殊密碼鎖

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

特殊密碼鎖

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

特殊密碼鎖

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