Atcoder 초급 콘테스트 (138 명)에 대한 간략한 설명

D - 무엇

질문의 의미 : 뿌리 트리에, 루트 노드 1, $ Q $ 작업이 모든 노드의 노드와 하위 트리의 값을 더한 작업의 값의 가중치 각각은 각 노드의 최종 무게를 요청 값.

아이디어 : 라인에 DFS 다시 미분.

#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병;

CONST의  INT N = 2E5 + 7 ;
벡터 < INT > G [N];
INT DFN [N], ID, N, Q, 마지막 [N], POS [N];
 발 [N], ANS [N];

보이드 DFS는 ( int로 , U을 int로 FA)을 {
    DFN [U] = ++ ID;
    POS [ID] = U;
    (자동 V : G [U]) {
         경우 (V == FA)가 계속 ;
        DFS (V U, 께);
    }
    마지막으로 [U] = ID;
}

값 int () {메인
    scanf와 ( " %의 D % d에 " , N, Q);
     ( int로 I = 1 , U, V, I는 N <; 내가 ++ ) {
        scanf와 ( " % d 개 %의 D ' , U, V);
        G [U] .push_back (V);
        G [V] .push_back (U);
    }
    DFS ( 1 , 0 );
    반면 (q-- ) {
          길이 (X);
        int로 U 단계;
        scanf와 ( " % d 개 %의 LLD ' , U, X);
        발 [DFN [U] + = X;
        발 [최후 [U]는 + 1 ] - =의 X;
    }
    위한 ( int로 I = 1 ; I ++는, 난 <= N ) {
        발 [I] + = 브로 [I - 1 ];
        ANS [POS [I] = 브로 [I];
    }
    위한 ( int로 I = 1 ; 나는 <= N; ++ i가 )
        의 printf ( " %의 LLD %의 C를 " , ANS [I], " \ n " [I == N]);
    반환  0 ;
}
코드보기

 

 

E - 불순물의 문자열


문제의 의미 $ S $, $ t $, $ S $ 두 문자열 $ 10 $ ^ $ S로 {100} 뷰 '$으로, 즉,'ABC '가된다'ABCABC ... ABCABC '$ Q 복사 인덱스 t의 제 1 단부 위치는 전혀 출력하지 존재하는 $ S '$ 시퀀스가 발생 $ -1.
샘플로
conteStcONtest : $의 S '$
$ T $ : 아들
일치하는 위치에 활용, 대답은 10입니다.

생각 : 서브 문제는 $ 네브라스카를 사용할 수있는 [I]는 [J]를 $ 문자열을 나타내는 $의 $ $ I $ 위치에, 다음 $의 J의 $ 문자의 위치는, 다음 쓸어 및 후면에서 전처리 할 수있다 통계, 전 전 현재에는 $의 t_ {J} 위치 후 $이 문자를 여러 일치 할 수 없습니다 욕심 일치 $ s의의 $에서 $ T는 $로 대답, 그 다음 $의에 $ 문자열, 대답에 갈 필요가있다 단지 $ S $ 뛰어 얼마나 많은 문자열을보고 최종 위치입니다.

#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병;

CONST의  INT N = 1E5 + 7 ;

문자 S [N], T [N];
INT NE [N] [ 26 ];
나오지 [로 (26) ];

값 int () {메인
    scanf와 ( " % S %의 S ' , S + 1 , t + 1 );
    INT LEN1의 strlen = (S + 1 ) = LEN2의 strlen (t + 1 );
     ( INT I = LEN1; I> = 0 ; 난 ... ) {
          ( INT의 J = 0 ; J < 26 ; ++ J )
            NE [I] [J] = 전나무 [J]
        경우 (I) 전나무 [S [I] - ' ' = I;
    }
    INT의 ID = 0 , ANS = 1 ;
    위한 ( int로 I = 1 ; I <= LEN2; 내가 ++ ) {
         경우 (NE [ID]를 t [I] - ' ' ]) {
            ID = NE [ID]를 t [I] - ' ' ];
        } 다른 {
             경우 (FIR [t의 [I] -! ' ' ]) {
                풋 ( " -1 " );
                반환  0 ;
            }
            ID = 전나무 [t [I] - ' ' ]; ++ ;
        }
    }
    의 printf ( " % LLD \ 없음 " , 1LL * (ANS - 1 ) * + LEN1 ID);
    반환  0 ;
}
코드보기

 

 

F - 우연의 일치


질문의 의미 : $ L $와 $ R의 $ 감안할 때, 질문은 $ X, $ 충족 $ Y $ 모 $ X = y를 $의 XOR의 $ y를 \ 왼쪽 (\ 당량 X \ 당량 y를 \의 당량의 R \ 권리 L)의 얼마나 많은 X의 $

생각 :
$ \ Y $ 모 $ X는 <X $ 때문에
$ \ 따라서 Y는 XOR $ X를 $ <X $으로의
설명은 Y $과 달러 것이다 $ X $ 최상위 비트 (1)가 동일한 위치에 있어야
$의 \ 따라서 \ dfrac {Y} X} {<$ 2
$ \ 따라서 Y - X = Y $ $ X는 XOR $
몇 가지 예는 이러한 조건을 만족하는 것이 발견되며, 이진 $ X $ $ $ Y 직접 감산 대출하지 않고도 달성 될 수 , 등
$ Y $ : 10110 (22 임)
$의 X의 $ : 10010 (18 임)
이 때 $ y는 $의 XOR을 $ X = Y - X = 4 $가
$ y를 $ 및 $ X = X 얻을 수 $ 및 $ X $ 및 가장 중요한 비트 $의 Y $ 1과 동일한 위치는
다음 DP 숫자를 할 수 있습니다.
Y $ $ R은 $, $의 X $으로의 L에 $ $ 이상인 $를 초과하지 않는 DP 디지털 열거 경우 동시에 2 진수는 경우가 어디에 전류 선행 0 A $ Y $ 및 X의 $ $ 그 $ y는 $보다 클 수 없다마다 $의 X $으로 동일하고 어떤 보증이어야 라인 ($의 X $으로 현재 비트가 1이고, 현재 위치가 $ Y $ 0 나타남).

#INCLUDE <. 비트 / stdc ++ H>
 #DEFINE가 긴 긴 것이다
 사용  스페이스 성병;

CONST  INT MOD 1E9 + = 7 ;
LL의 DP [ 70 ] [ 2 ] [ 2 ] [ 2 ];

해결하는 것이다 (LL의 L, LL R, int로 볼때, BOOL limit1, BOOL limit2, 부울 리드) {
     경우 POS (< 0 )  1 ;
    LL 및 ANS = DP [POS] limit1] limit2 [리드];
    만약 - (! ANS = 1 ) 반환 ; ANS
    ANS = 0 ;
    INT UP2 = limit2? (R & POS >> 1 ) 1 ;
    INT UP1 = limit1? (L >> POS 및 1 ) 0 ;
    위한 ( int로 = UP1를 I 단계; 나는 <= 1 ; I ++ )
          ( INT J = 0 ; J <= UP2; J ++ ) {
             경우 (I> J) 계속 ;
            만약 (! 리드 & & I = j는) 계속 ;
            (ANS + = 해결 (L, R, POS - 1 , limit1 && I == UP1, limit2 && j를 == UP2 && j 개의 리드 == 0 )) % = MOD;
        }
    반환 년;    
}

값 int () {메인
    memset 함수 (DP, - 1 , 를 sizeof (DP));
    LL의 L, R;
    scanf와 ( " %의 LLD의 %의 LLD ' , L, R);
    의 printf ( " %의 LLD " (해결 L, R, 60 , 1 , 1 , 1 ));
    반환  0 ;
}
코드보기

 

추천

출처www.cnblogs.com/Mrzdtz220/p/11671345.html