B.ニキータと文字列の
ある日ニキータには、文字「A」と「B」を含む文字列を発見しました。
ニキータは、それは「」と2回目のみが含まれ、1回目および3-RD 1は文字のみが含まれている文字の順序を変更することなく、3つの文字列(空の場合)に切断することができるならば、その文字列が美しいと考えています文字 "B"。
ニキータは、その文字の一部(おそらくなし)が、その順序を変更せずに除去することによって、文字列を美しくしたいと考えています。彼が得ることができる文字列の最大長は何ですか?
入力
の最初の行は、長さの非空の文字列が含まれているだけでなく、小文字英文字「a」及び「b」を含む5より大きい000。
出力は、
単一の整数を印刷する-美しい文字列ニキータの可能な最大サイズは得ることができます。
入力
アバ
出力
4
質問の意味:文字列の最大長と文字列を与えられたことは5000で、唯一のABは、今あなたが聞いていることを、この文字列は三つの部分、第一及び第三の部分が空であるか、最初に分けることができない、から構成されることを提供しますまたは空の二液型組成物によるB。最長ので、どのくらいであればQ.あなたは、そのような形にでした。
アイデア:暴力[+アナログのみの5例。彼らは、B、AB、BA、ABAあります。だから我々はちょうど私達は次のように最大の最後の1を取る、これら5例最大長をカウント]
ACコード:{曲かなり長い時間QAQ皿が原罪です}
1つの#include <ビット/ STDC ++ H> 2 3 使用して 名前空間STDを、 4 の#define N 1200000 5 セット < チャー > SSS。 6 構造体STR { 7 のint タイプ。 8 のint NUM; 9 int型銭。// 前缀 10 のint HOU。// 后缀 11 } ST [N]。 12 INT メイン(){ 13 列STR。 14 cinを>> STR。 15 INT須磨= 0 ; 16 INT SUMB = 0 。 17 int型 CNT = 0 。 18 INTの追加= 1 。 19 のためには、(int型 iは= 0 ; I <= str.size(); iは++ ){ 20 であれば(STR [I] == ' ' && I =!str.size()){ 21 スマ++ 。 22 } そうであれば(STR [I] == ' B ' && I!= str.size()){ 23 SUMB ++ ; 24 } 25 であれば(!STR [I] = STR [I + 1 ]){ 26 ST [CNT] .TYPE = STR [I] - [ A ' 。 27 ST [CNT ++] numは=。追加します。 28 追加= 1 。 29 } 他{ 30 アド++ 。 31 } 32 場合(I =!str.size()) 33 sss.insert(STR [I])。 34 } 35 であれば(sss.size()== 1){ // 、情况B 36 のprintf(" %d個の\ n " 、str.size())。 37 リターン 0 。 38 } 39 INT SA = 0 。 40 INT SB = 0 。 41 のために(int型 I = 0 ; iがCNTを<; Iは++){ // 前缀 42 場合(ST [I] .TYPE == 1 ){ 43 ST [i]は.qian = SA。 44 } 他{ 45 ST [i]は.qian = SB。 46 } 47 であれば(ST [i]が.TYPE == 1){ // 类型:B 48 、SB + = ST [i]は.num。 49 } 他{ 50 SA + = ST [i]は.num。 51 } 52 } 53 SA = 0 。 54 SB = 0 。 55 のためには、(int型 I = CNT- 1 ; I> = 0 ; i-- ){ 56 であれば(ST [i]が.TYPE == 1 ){ 57 ST [i]は.hou =SA; 58 } 他{ 59 ST [i]は.hou = SB。 60 } 61 であれば(ST [i]が.TYPE == 1){ // 类型:B 62 、SB + = ST [i]は.num。 63 } 他{ 64 SA + = ST [i]は.num。 65 } 66 } 67 / * 68 のための(I = 0 int型、私はCNTを<; Iは++){ 69 のprintf( "%dの"、ST [I] .num)。 70 } 71 のprintf( "の\ n"); 72 {ため(iは++; iは、CNT <I = 0 INT) 73 ( "%D%D \ n"は、ST [i]は.qian、ST [i]は.hou)のprintfと、 74 } 75 * / 76 INT ANS = MAX(スマ、SUMB)。 77 78 のために(int型 i = 0 ; iは、CNT <; iは++ ){ 79 であれば(ST [i]が.TYPE == 1 ){ 80の ANS = MAX(ANS、ST [i]は.num + ST [i]は.hou + ST [i]の.qian)。 81 int型のアドオン= 0 ; 82 のための(int型 J = iが+ 2、J <CNT; J + = 2 ){ 83 + =追加ST [J] .numを。 84の ANS = MAX(ANS、ST [i]は.qian +追加+ ST [i]は.num + ST [J] .hou)。 85 } 86 } 87 88 } 89 のための(INTは、I = 0 ; iは、CNT <; iは++ ){ 90の ANS = MAX(ANS、ST [i]は.num + ST [i]の.hou)。 91の INTは RES = 0 。 92 のための(int型 J = + 2 ; J <CNT J + = 2 ){ 93の RES + = ST [J] .num。 94 年= MAX(年ST [i]は.num + RES + ST [J] .hou)。 95 } 96 } 97 98 COUT << 年。 99 リターン 0 ; 100 } 101 102 / * 103 bbabbbbbaaba 104 aabaaaaabbab 105 aaaabaabbbbbaaabaaaa 106 、B、AB、BA、ABA 107 108 109 BBはAA BBBBB BAを有する 110 111 2 1 5 2 1 1 112 113 114 115 116 * /