주제 배경
USACO19年一月金组第一题
제목 설명
농부 존은 알려져 있지 않다, 예술 자금에 베시도 치열하다! 최근에, 그녀는 많은 위대한 시인을 공부하기 시작, 지금 그녀는 자신의시의 일부를 만들려고 싶어. N (1≤N≤5000) 단어를 이해 베시, 그녀는 그들에게 그녀의시에 기록 될 싶어. 베시 단위로 각 그녀가 아는 단어, 음절의 길이를 계산했다, 그녀는이 말의 다른 부문이 될 것이다 "운율." 단지 이름이지 다른 사람이 같은 단어의 운율에 속하는 각 단어.
베시 M 행 (^ 1≤M≤10 5)의 각시, 각 행은 K (1≤K≤5000) 음절을 구성한다. 또한, 베시의시의 운율은 지정된 패턴을 따라야합니다.
베시는 많은 다른시 먼저 그녀가 쓸 수있는 제약 조건을 충족하는 방법을 알고 싶어요.
입력 형식
입력의 첫 번째 라인은 N, M 및 K. 포함 다음 행 N 개의 정수를 각각 포함하는 열 SI (1≤si≤K) 및 CI (1≤ci≤N). 이것은 인식 할 수있는 길이 베시 (음절 단위)는 SI, CI 속하는 단어의 운율이다 나타낸다.
마지막으로 M 라인은 베시가, 대문자의 EI를 포함하는 각 행을 패턴을 운 원에 대해 설명합니다. 모든 운율 패턴은 동일한 워드 운율 부 끝나야 EI 라인과 동일하다. 에이 값은 다른 라인 운율 단어가 다른 부분으로 끝나야되지 않습니다.
출력 형식
베시는 이러한 제한을 다른시의 수를 충족하기 위해 출력을 작성할 수 있습니다. 이 숫자가 상당히 클 수 있기 때문에, 인계의 1,000,000,007 결과의 수를 계산합니다.
샘플 입출력
10 3 3 3 1 4 1 3 2 B
960
설명 / 팁
이 경우, 베시는 세 단어를 알고있다. 처음 두 단어가 다른 단어와 운율하지, 셋, 넷 음절 음절 지난 3 음절의 단어 길이의 길이를 운율. 그녀는 각 라인에 10 개 음절을 포함, 세 줄의시를 쓰고 싶어하고, 처음과 마지막 행은 운율. 960 개 등시의 총. 121,123,321 다음은 (첫 번째, 두 번째, 세 번째 단어를 나타내는 1,2,3) 요구 사항을 충족하는 시이다.
코드
#INCLUDE <. 비트 / stdc ++ H> #DEFINE mm 1,000,000,007 #DEFINE의 N 5007 사용 스페이스 성병; 구조체 노드 { INT의 S, C; } A [N]; INT F [N] [N], B [ 27 ]; 인라인 INT의 PP ( INT의 X, INT의 K) { INT (S) = 1 ; 하면서 (K) { 경우 (K & 1 ) S = (1LL * S *의 X) % mm; X = (1LL * X * X) %의 mm; K >> = 1 ; } 돌아 들; } INT 의 main () { INT의 N, M, K; 숯 C; 긴 길이 의 ANS = 0 , 입술 = 1 ; scanf와 ( " % D % D % D " , 및 N, M, K); 위한 ( int로 I = 1 ; 나는 <= N; 내가 ++)는 scanf를 ( " % d 개 %의 D ' , A [i]를 .S, & A [I]가 .c); 위한 ( int로 I = 1 ; I <= m; 내가 ++ ) { scanf와 ( " \ n 개의 %의 C " , 및 C); B [C -' ' + 1 ] ++ ; } F를 [ 0 ] [ 0 ] = 1 ; 위한 ( int로 I = 0 ; i가 = K를 <I가 ++는 {) 에 대해 ( INT의 J = 1 ; J <=는 N; J ++ ) { 경우 (전 .S <= A [J]를 + K) { 물질 F 나 + A [J] .S] [A [j]가이 .c = (F [I]이 [ 0 ] + F [내가 [J를 +] .S] [A [J]가 .c]) % mm; F [I는 A [J를 +] .S] [ 0 ] = (F [I] [ 0 ] + F [i가 + A [J] .S] [ 0 ]) % mm; } } } 에 대해 ( int로 I = 1 ; i가 <= 26 ; I ++ ) { 경우 ([I] b를!) 계속 ; 대 ( INT의 J = 1 ; J <= N; J ++ ) { 경우 (F [K] [J]) ANS = (ANS + PP (F [K] [J], B [I])) % mm; } 입술 = (1LL * * 입술 ANS) % mm, ANS = 0 ; } 의 printf ( " %의 LLD " , 해상도); 반환 0 ; }