CF 라운드 # 579 (사업부. 3)

https://codeforces.com/contest/1203/problem/D2

 

이 문제 해결 방안은 욕심 관찰을 기반으로합니다.

사고의 가장 일반적인 용도 중 하나는, 건축 사진, 대답과 같은 질문이 아닌 질문에 대한 답에 대한 답을 찾습니다
대답이 경우 우리가 조각을 제거 시간 (L, R)의 경우 (난, r은)이며, 그것은 리터가 더 이상 왼쪽을 확장 할 수 있다는 것을 의미, r은 오른쪽으로 더 확장 할 수 없습니다. T는 반드시 왼쪽 절반은 오른쪽 R 구성의 L 부분으로 구성되어 의미한다.
바로 나올 준비. t는 각각, 찾을 = 'ABC' ''+ 'ABC', '의 경우 는'+ 'BC', 'AB C'+ '를', 'ABC'+ ' 이 과거에있어서, 상기 중간 부의 최대 길이를 찾는 방법. a는 창을 밀어되지 않도록! 그러나 우리는 창 밖 성격보다는 속성 창,하지만 같은 동작 우려하고있다.


구체적으로 수행하는 방법 :
의이 목록 [부울] 이러한 위치 중 하나를 표시 (만 레코드 목록 진짜야 위치 [INT] 실제로 더 나은로하지만, 코드를 변경하지 않으)의 첫 번째 t의 각 요소의 위치를 찾을 수 기록했다. 위치 L에리스트 [BOOL]를 대응하는 위치에, 그 다음, R은 최종 위치 (S)의 우측에 해당 초기화되고, 즉, 문자 t 먼저 'ABC'+ '이 경우, 좌측 절반을 발견하고 방전 지금 "ABC"+ ''솔루션입니다. 이어서 'AB'+ 'C'를 찾고, 난 이 유효한 솔루션의 문자를 포함하는 오른쪽 R 'C'까지 오른쪽, 왼쪽 위치로 이동한다. 마지막 줄까지.

코드 :

= S의 INPUT () 
T = 입력 () 


DEF GET (S, T) 
    의 Nd = 0 
    DP = FALSE] * 렌 (S)    #의 기록 여부를 특정의 현재 위치 
    에 대한 I 범위 (LEN (S)) : 
        C의 =에서 S [I]
         IF 의 Nd <LEN (T)  C == T [Nd를] 
            DP [I] = 
            의 Nd + = 1.
         IF 의 Nd == LEN (T) :
             리턴 I, DP 


L, DP = (S, T) GET 
R & LT = LEN (S)를 -. 1 

ANSR = - (L) 

에 대한 (C) 반전 (t) 
    L - 1 =
     동안 L> = 0  DP [L] == 거짓 : 
        L - = 1
     동안 ! S (R) = C : 
        R - 1 개 = 
    R - = 1 
    ANS = 최대 (ANS, R - l) 

인쇄 (ANS)

 원칙적으로 마지막 질문의 상 정렬 :

정렬 + 배낭, 고전적인 일치

 

추천

출처www.cnblogs.com/waldenlake/p/11361462.html