codeforces 1324 C.カエル(貪欲/半)ジャンプ

文字列の左側にカエル滞留あり、S = S 1 、S 2 ... S N S = S1S2 ... SnからなるN(セルでより正確な、カエルは、最初に滞在することがn文字0 0)。各文字 s「はどちらかであるL」または「R」。それはカエルがに滞在されている場合ことを意味し、私 I番目のセルとI I番目の文字が「あるL」、カエルは左のみにジャンプすることができます。カエルに滞在されている場合は、私 I番目のセルとI I番目の文字「がR」、カエルは右のみにジャンプすることができます。カエルは、細胞からだけ右にジャンプすることができます0 0。

カエルは二度同じセルにジャンプすることができ、それが必要として多くのジャンプのように実行できることに注意してください。

カエルが達したいと思うのn + 1つのn + 1番目のセルを。カエルは、いくつかの選択した正の整数値Dの Dは最初のジャンプの前(及び後にそれを変更することはできません)と、を超えないことにより、ジャンプD一度D細胞。場合すなわちI I番目の文字が「L」を蛙の範囲内の任意のセルにジャンプすることができる[ mはX 0 I - D I - 1 ] [MAX(0、I-D)、I-1]、及び場合I I番目の文字が'はR'を蛙は、範囲内の任意のセルに移動することができる[ I+ 1 M N N + 1 + D ] [I + 1、分(N + 1、I + D)]。

カエルは、あなたのタスクは、可能な最小値を見つけることですので、遠くにジャンプする必要はありませんDカエルは、細胞に到達することができるようにD のn + 1を、細胞からのn + 1 0それは超えないでジャンプすることができれば0 D一度にD細胞。到達することは常に可能であることが保証されているN + 1からN + 1を0 0。

あなたは答える必要がトントンの独立したテストケースを。

入力

入力の最初の行は1つの整数含まれたT Tを(1 T 10 4 1≤t≤104) -テストケースの数。

のT T線は、テストケースを記述する。I I番目のテストケースは、文字列として記述されているS sが少なくとも成る1 1及び多くとも2つの10 5 2⋅105文字「L」と「R」。

すべてのテストケースの上に文字列の長さの合計がない超えていることを保証されている2 10 5 2⋅105(Σ | | 2 10 5 Σ|よ|≤2⋅105)。

出力

可能な最小の値-各テストケースのために、答え印刷D Dそのようなカエルが到達できるセルN + 1のセルからN + 1 0が超えないことにより、ジャンプ場合は0をD一度D。

入力
6 
LRLRRLL 
LLR 
RRRR 
LLLLLL 
R
出力
3人の
2 
3 
1 
7 
1 
私はラインオーバー貪欲直接スイープのようだった==書か半分でこの問題チームメイト...
書き込みに怠け者は、彼のチームメイト半分のコードを置きます。
#include <ビット/ STDC ++ H> 使用して名前空間STDを、
const int型 MAXN = 2 * 1E5 + 10 チャーS [MAXN]。
int型のn; ブールチェック(INT D){
     int型の P = 0 一方、(P + D <N + 1 ){
         BOOL OK = INT I = P + D; I> = P + 1 ; i-- もし(S [I] == ' R '){P = I。OK = 

  

; 休憩; }
         であれば(OK == ブレーク
    } 
    戻り P + D> = N + 1 
} 

int型のmain(){ 
    IOS :: sync_with_stdio()。
    int型T; 
    cinを >> トン。
    一方、(t-- ){ 
        memsetの(S、0はsizeof S)。
        CIN >> S + 1 ; 
        N = STRLEN(S + 1 )。
        INT、L = 0、R = N +1 ;
        一方、 - (L> R 1 ){
             int型ミッド=(L + R)/ 2 もし(チェック(MID))、R = ミッド;
            リットル= ミッド; 
        } 
        のprintf(" %dの\ n " 、R)。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/lipoicyclic/p/12590457.html