翻紙牌遊戲

2021-06-21 08:17:21 字數 1076 閱讀 8777

題目描述

有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態(有些朝正,有些朝反),現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌(由正翻到反,或者有反翻到正)時,他左右兩張紙牌(最左邊和最右邊的紙牌,只會影響附近一張)也必須跟著翻動,現在給你乙個亂的狀態,問你能否把他們整理好,使得每張紙牌都正面朝上,如果可以,最少需要多少次操作。

輸入有多個case,每個case輸入一行01符號串(長度不超過20),1表示反面朝上,0表示正面朝上。

輸出對於每組case,如果可以翻,輸出最少需要翻動的次數,否則輸出no。

樣例輸入

01011

樣例輸出no1

做這個題時狀態不太對,思路沒有跟上,還有一點失誤是以前做過一道翻硬幣的題與此題略像,於是我想當然的就沒仔細看題目,等發現不對勁,就有點慌了,還是靠度娘提示找回了狀態.比較氣憤的是我最後做出來了,大概測試次數太多,服務端不工作了,導致10分丟掉了.然後又去杭電上測,過了.

首先是題目具有貪心的性質,即可以從左至右依次翻動,能得最優解.

發現對於每一例資料總共只有兩種情況,即第乙個硬幣翻不翻,接下來每乙個步都由此確定了.

#include#include#define n 50

char getfan(char x)

int count(char s)

}if(s[len - 2] == s[len - 1])

else

}int main(void)

strcpy(t, s);//s為第乙個硬幣未翻動,t已翻動

t[0] = getfan(t[0]);

t[1] = getfan(t[1]);

c = count(s);

temp = count(t);

temp = temp < 0x7fffffff ? temp + 1 : temp;//t在count之前已翻動一次,要記得加上

c = temp < c ? temp : c;

if(c == 0x7fffffff)

else

}return 0;

}

翻紙牌遊戲

翻紙牌遊戲 time limit 3000msmemory limit 32768kb64bit io format i64d i64u submit status practice hdu 2209 description 有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙...

翻紙牌遊戲一

看到乙個紙牌演算法,第乙個看著有意思的程式設計了。有好幾種程式設計方式,我說一下簡單的一種。有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左...

1201 翻紙牌遊戲 ZCMU

有一種紙牌遊戲,很有意思,給你n張紙牌,一字排開,紙牌有正反兩面,開始的紙牌可能是一種亂的狀態 有些朝正,有些朝反 現在你需要整理這些紙牌。但是麻煩的是,每當你翻一張紙牌 由正翻到反,或者有反翻到正 時,他左右兩張紙牌 最左邊和最右邊的紙牌,只會影響附近一張 也必須跟著翻動,現在給你乙個亂的狀態,問...