2013C語言B組8.翻硬幣 貪心

題目標題:翻硬幣

小明正在玩一個“翻硬幣”的遊戲。

桌上放着排成一排的若干硬幣。我們用 * 表示正面,用 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
****************************************************************/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章