#442(DIV 2)BタイトルQAQシミュレーションタイトルラウンドCodeforces

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]は.nu​​m。
49          } {
 50              SA + = ST [i]は.nu​​m。
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]は.nu​​m。
63          } {
 64              SA + = ST [i]は.nu​​m。
65          }
 66      }
 67      / * 
68      のための(I = 0 int型、私はCNTを<; Iは++){
 69          のprintf( "%dの"、ST [I] .nu​​m)。
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]は.nu​​m + ST [i]は.hou + ST [i]の.qian)。
81              int型のアドオン= 0 ;
82              のためのint型 J = iが+ 2、J <CNT; J + = 2 ){
 83                 + =追加ST [J] .nu​​mを。
84の                  ANS = MAX(ANS、ST [i]は.qian +追加+ ST [i]は.nu​​m + ST [J] .hou)。
85              }
 86          }
 87          
88      }
 89      のためのINTは、I = 0 ; iは、CNT <; iは++ ){
 90の          ANS = MAX(ANS、ST [i]は.nu​​m + ST [i]の.hou)。
91の         INTは RES = 0 92          のためのint型 J = + 2 ; J <CNT J + = 2 ){
 93の              RES + = ST [J] .nu​​m。
94             年= MAX(年ST [i]は.nu​​m + 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  * /

 

おすすめ

転載: www.cnblogs.com/pengge666/p/11569271.html