P1944は、最長一致_NOIガイド2009増加をブラケット(1)

括弧改善_NOIガイド2009年P1944最長一致

問題の解決策

私は何かの魚があったことを信じることを好む、ちょうどいくつかの谷のタイトルタグを信じることができません

 

私は長い間考えた後、問題のチラリソリューションは、シミュレート十分にスタックしてい

[i]はフラグが使用に一致されているかどうか、BOOL配列を使用する必要があり、シミュレートするスタック

トピックが必要なので、ブラケットの束、スタック、ポップアップ最初の試合に、マークは、行の最大の罰金、その後、試合の最後のピックを一致したサブストリング

 

二つの点に注意してください。

参照番号は、トップ1.Q [トップ]配列は括弧内に格納された括弧書きの符号を格納し、されていないいます

一時的にどのように多くの試合連続、括弧の合計数を記録2.res、新しいブラケットに直面したときに再び更新されます

特定のコードを組み合わせてもよいです

 

コード

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <cstdlib> 
書式#include <アルゴリズム> 
書式#include <cmath> 
の#include < 文字列 > 
の#include <CStringの> 
の#include <キュー> 使用して名前空間はstdを、
typedefの長い長いLL。
インラインint型リード()
{ int型 ANS = 0 チャー最後=を' '、CH = GETCHAR()。
    しばらく(CH < ' 0 ' || CH>

 
 

     9 ')最後= CH、CH = GETCHAR()。
    一方、(CH> = ' 0 ' && CH <= ' 9 ')ANS = ANS * 10 + CH- ' 0 '、CH = GETCHAR()。
    もし(最後== ' - ')ANS = - ANS;
    戻り値は、ANS; 
} 

CONST  INT MAXN = 1E6 + 10 チャーS [MAXN]。
ブール使用[MAXN]。
int型のトップ= 0 、Q [MAXN]。
INT L、R、ANS = 0、RES = 0、L1 = 0、R1 = 0 

INT メイン()
{ 
    scanf関数(" %S "、S + 1 )。
    INT LEN = STRLEN(S + 1 )。        
    memsetの(使用、0はsizeof (使用))。
    以下のためにINT iが= 1 ; I <= LEN; I ++ ){
         もし、((S [ Q [トップ] ] == ' ' && S [I] == ' ')||(S [ Q [トップ] ] == ' [ ' && S [i]を== "] ' )){ 
            使用[Q [ トップ - ] = 1 
            使用[I] = 1 
        } 
        { 
            Q [ ++トップ] = I。
        } 
    } 
    のためにINT iは= 1 ; I <= LEN; I ++ ){
         場合(!使用[I]){
             場合(RES> ANS)ANS = RES、L = L1、R = R1。
            RES = 0 ; //不可以放到里面なら 
        } 
        {
             場合(RES == 0)L1 = R1 = I;
              R1 ++ ;
             RES ++ ; //配置されていない場合に内部 
        } 
    } 
    もし(RES> ANS)ANS = RES、RES = 0、L = L1 = R&LT R1;
     のためint型 I L =; I <= R&LT; I ++)のprintf(" %のC " 、S [I]);
     戻り 0 ; 
}

 

Aハンクは彼自身を開始し、その後ハンク自身SIました

1。())[]())[]

2。())]([(] [()]]()

 

 

おすすめ

転載: www.cnblogs.com/xiaoyezi-wink/p/11922409.html