題目標題:翻硬幣
小明正在玩一個“翻硬幣”的遊戲。
桌上放着排成一排的若干硬幣。我們用 * 表示正面,用 o 表示反面(是小寫字母,不是零)。
比如,可能情形是:**oo***oooo
如果同時翻轉左邊的兩個硬幣,則變爲:oooo***oooo
現在小明的問題是:如果已知了初始狀態和要達到的目標狀態,每次只能同時翻轉相鄰的兩個硬幣,那麼對特定的局面,最少要翻動多少次呢?
我們約定:把翻動相鄰的兩個硬幣叫做一步操作,那麼要求:
程序輸入:
兩行等長的字符串,分別表示初始狀態和要達到的目標狀態。每行的長度<1000
程序輸出:
一個整數,表示最小操作步數
例如:
用戶輸入:
**********
o****o****
程序應該輸出:
5
再例如:
用戶輸入:
*o**o***o***
*o***o**o***
程序應該輸出:
1
資源約定:
峯值內存消耗 < 64M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多餘內容。
所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 #include , 不能通過工程設置而省略常用頭文件。
提交時,注意選擇所期望的編譯器類型。
——————————————————————————————————————————————
貪心
#include<iostream>
#include<cstdio>
using namespace std;
string s,t;
int main()
{
cin>>s>>t;
int l=s.length();
int f=0,res=0;
for(int i=0;i<l;i++){
if(s[i]!=t[i]){
if(f){
res+=i-f+1;
f=0;
}
else f=i+1;
}
}
cout<<res<<endl;
return 0;
}
/**************************************************************
Time:0 ms
Memory:2024 kb
****************************************************************/