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