給定一個字符串,僅由a,b,c 3種小寫字母組成。當出現連續兩個不同的字母時,你可以用另外一個字母替換它。
如有ab或ba連續出現,你把它們替換為字母c;
有ac或ca連續出現時,你可以把它們替換為字母b;
有bc或cb連續出現時,你可以把它們替換為字母a。
你可以不斷反復按照這個規則進行替換,你的目標是使得最終結果所得到的字符串盡可能短,求最終結果的最短長度。
輸入:字符串。長度不超過200,僅由abc三種小寫字母組成。
輸出:按照上述規則不斷消除替換,所得到的字符串最短的長度。
例如:
輸入cab,輸出2。因為我們可以把它變為bb或者變為cc。
輸入bcab,輸出1。盡管我們可以把它變為aab -> ac -> b,也可以把它變為bbb,但因為前者長度更短,所以輸出1。
#include <stdio.h>
MAX 200
typedef String[ MAX +
N(x) N_(x)
N_(x) #x
input( * unsigned min_len( *
main(
printf(
unsigned min_len( *
input( * puts( scanf(N(MAX) puts( }
len = strlen( s );
reduce( newstr , s , i1 );
newlen ;
newlen = min_len( newstr );
( newlen <=
unsigned min_len( * len = i = ( s[i] != && s[i+] != ( s[i] != s[i+
newlen = ( newlen < len = i ++ }
#include <stdio.h>
#include <.h>
MAX 200
typedef String[ MAX +
N(x) N_(x)
N_(x) #x
input( * unsigned min_len( * reduce( * , * turn ( ,
main(
printf(
turn ( c1 , + + - c1 -
reduce( * st , * st[i] = turn ( ss[i] , ss[i+ strcpy( st + i + , ss + i +
unsigned min_len( * len = i = ( s[i] != && s[i+] != ( s[i] != s[i+
newlen =
( newlen < len = i ++
input( * puts( scanf(N(MAX)
puts( }