1039 字元消除

2021-07-14 12:39:03 字數 2166 閱讀 2473

時間限制:1000ms

單點時限:1000ms

記憶體限制:256mb

小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母"abc"的字串s,消除過程是如下進行的:

1)如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如"abccbcccaa"中"cc","ccc"和"aa"會被同時消除,餘下"ab"和"b"拼成新的字串"abb"。

2)上述消除會反覆一輪一輪進行,直到新的字串不包含相鄰的相同字元為止。例如」abccbcccaa」經過一輪消除得到"abb",再經過一輪消除得到"a"

遊戲中的每一關小hi都會面對乙個字串s。在消除開始前小hi有機會在s中任意位置(第乙個字元之前、最後乙個字元之後以及相鄰兩個字元之間)插入任意乙個字元('a','b'或者'c'),得到字串t。t經過一系列消除後,小hi的得分是消除掉的字元的總數。

請幫助小hi計算要如何插入字元,才能獲得最高得分。

輸入第一行是乙個整數t(1<=t<=100),代表測試資料的數量。

之後t行每行乙個由'a''b''c'組成的字串s,長度不超過100。

對於每一行輸入的字串,輸出小hi最高能得到的分數。

第一組資料:在"abcbcccaa"的第2個字元後插入'c'得到"abccbcccaa",消除後得到"a",總共消除9個字元(包括插入的'c')。

第二組資料:"aaa"插入'a'得到"aaaa",消除後得到"",總共消除4個字元。

第三組資料:無論是插入字元後得到"aabc","abbc"還是"abcc"都最多消除2個字元。

樣例輸入

3

abcbcccaa

aaaabc

樣例輸出

9

42

剛看題目以為有簡便方法,結果到ac了也沒想到,最後還是用的列舉。

因為只考察abc三種插入情況,因此先對string[i]位置插入三次,分別計算分數,取最大值score。然後列舉string[i​]插入的位置,在列舉計算出的多個score中取最大值。

插入字串和取最大值的函式比較easy,難點主要在於countscore函式:

int countscore(const char string)

temp_letter=temp_string[i];

} temp_string[j]='\0';

} return length-temp_length;

}我是通過變數i對字串掃瞄去重,去重的字串通過變數j(當前字串長度)複製到temp_string陣列中。

temp_letter表示掃瞄的字串中的前乙個字母,temp_length表示上一次去重完的字串長度。

這裡要注意一點temp_string陣列中的任何乙個字母都是在原陣列中與前後字母均不一致的字母。(首字母僅需要與第二個字母不一致即可,為與其他保持一致,直接將第一次的temp_letter命名為不相干的字母)

結束迴圈的條件是去重的字串長度與去重前一致(最簡形式)。

得分為字串原長與最簡形式長度之差。

最後放上ac**:

#include

#include

char *insert_string(char deststring,const char string,int i,char insert_letter);

int countscore(const char string);

int maxscore_in_three(int a,int b,int c);

int main()

printf("%d\n",maxscore);

maxscore=0; }}

int maxscore_in_three(int a,int b,int c)

char *insert_string(char deststring,const char string,int i,char insert_letter)

deststring[i]=insert_letter;

return deststring;

}int countscore(const char string)

temp_letter=temp_string[i];

} temp_string[j]='\0';

} return length-temp_length;

}

1039 字元消除

字元消除,正好簡單複習一下,c 中的容器。容器使用起來還是比較方便的,包括string型別,還是要經常寫寫,才知道自己那些地方有問題。include stdafx.h include include include using namespace std string stringremove st...

hihocoder 1039 字元消除

小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 a...

Hihocoder 1039 字元消除

小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 a...