時間限制: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個字元。
樣例輸入
3abcbcccaa
aaaabc
樣例輸出
942
剛看題目以為有簡便方法,結果到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...