난 그냥 것보다 왜 더 이해하지 못하는 몇 가지 사전 튀긴 다음 mzoj에 넣어 또한 사전-8을해야합니다
정말 내가 쓰고 싶은 그것은 QAQ의 버전을 DFS
사용법 #include <iostream> #INCLUDE <cstdio> #INCLUDE <큐> #INCLUDE <CString을> #INCLUDE <cmath> #INCLUDE <적층> #INCLUDE <알고리즘> 사용 스페이스 성병; #DEFINE 줄게 긴 긴 #DEFINE의 RG 레지스터 CONST의 INT N = 2,000,000,000 + 5 , PW = 11 , INF = 0x3f3f3f3f , P = 19,650,827 ; LL A, B, X, Y; LL의 기지국 [ 20 ], F [ 20 ] [ 10 ]; //填了多少当前 서식 < 클래스 t> 공극 RD (t 및 X) { X = 0 ; INT w = 0 ; 숯 CH = 0 ; 잠시 w | = CH == (isdigit에 (CH)!) ' - ' , CH = getchar가 (); 반면 (isdigit에 (CH2)) X = (X << 1 ) + (X << 3 ) + (CH ^ 48 ) = CH getchar가 (); X ? = w - X : X; } 보이드 프리 () { 위해 ( int로 I = 0 ; I <=9 ; I ++) F [ 1 ] [I] = ((I ==! 4 )); 위한 ( int로 I = 2 ; 나는 <= 8 ; ++ I) 대 ( INT의 J = 0 ; J <= 9 ; ++ j)는 { 만약 (j의 == 4 ) {F [I] [J] = 0 ; 계속 } 에 대해 ( INT에서 K = 0 ; K <= 9 ; ++ K)의 경우, ((k 값 ==! 4 || j 개의 == 6 && 유전율 == 2 F [I] [J] + = F의 [)) I- 1][케이]; } } 해결하는 것이다 (LL의 XX) { LL의 P = 0 , NUM [ 20 ], 합계 = 0 ; // 대 (p = 0; p <= 13; ++, P)의 경우 (베이스 [P]> X) 분해; 반면 (XX) NUM는 [++ P가]에서 XX % = 10 , XX / = 10 ; NUM [P + 1 ] = 0 ; / * 위해 (; 나는 <P를, I = 1 값 int ++ I) 대 (INT의 J = 1; J <= 9; ++ j)의 합계 = F + [I] [J] (1 = 1에서 INT; I <NUM [P] I ++) 합계 = F + [P] [I]; {- 위해 (I; I> 0 I = P-1 INT) 대 (INT의 J = 0; J <NUM [I]; ++ j)를 ! 경우 ((j의 == 2 && NUM [I + 1] = = 6)) 합계 = F + [I] [J] 경우 (NUM [I] == 4 || (NUM [I] == 2 && NUM [I + 1] == 6)) 브레이크; } * / 에 대한 ( int로 I = P, I> 0 ] - I) { 대 ( INT의 J = 0 ; J <NUM [I]; ++ j)의 경우 ! ((j의 == 2 && NUM [I + 1 ] = = 6 )) 합계 = + F [i]는 [J] 경우 (NUM [I] == 4 || (NUM [I] == 2 && NUM [I + 1 ] == 6 )) 브레이크 ; } 리턴 합; } int 형 ) (주 { // freopen을 ( "in.txt", "R", 표준 입력); // freopen을 ( "nocows.out", "w", 표준 출력); 사전 (); / * 위해 (I = 1을 나타내는 int i가 <= 9; I ++) { printf와 ( "\ n")를; 대 (INT의 J = 0; J <= 9; ++ J)의 printf ( "%의 D ', F [i]는 [J]); } * / 상태 (는 scanf ( " %의 LLD의 %의 LLD ' , A, 및 B) == 2 && &&의 b) { 의 printf ( " % LLD \ 없음이 " 해결 (b + 1 ) - 해결 (a)); } 반환 0 ; }