이 질문은 어떤 쓰레기 물건을 직면
첫 번째 질문의 형식은 디지털 DP를 볼 것으로 예상하지만, 제곱의 합을 찾고 있습니다. DP의 디지털 출시를보십시오.
먼저 시도하고 철자. 제공자 $의 F [LEN은 [합] [개조] $는 $ 렌 $ 비트 포지션 디지트 기입 $ SUM $가 충전되어, 수치 $ 개조 번호 반응식 $ 시간의 나머지 부분을 나타내고, $의 g [LEN] [합] [MOD] $ (충전이없는 공간의 후방 부 및 프론트 남은 횟수 참조) 모든 요구 및 개수를 만족시키기 위해,이 경우이다.
수의 후 작성 열거 한 후 $ 내가 $ I $이 충전되고, 각각 $의 X의 $에 대한 요구 사항을 충족, $
$ 10 ^ {- 1} 렌 I + X $
($ f를 아래 [렌-1] [SUM (+ I) \ 개조 7] (MOD * 10 + I) \ 개조 7 $ 약칭 $의 F '$, $의 g, 시간 $ 공감)
따라서, 누적 효과가 각각 $ I $ 들면 $ X 이러한 달러하고 있어야 푸시
$ g의 [LEN] [합] [개조] = \ 합계 \ limits_ {I} (10 ^ {렌 - 1}이 '+ g') $
그래서는 $ g의 $의 순환을 완료했다. $ H $ 광장과 유사하게 추정 뒤 공석의 수를 나타냅니다.
$의 H [LEN] [합] [개조] = \ 합계 \ limits_ {I} (10 ^ {렌-1}) ^ 2 I ^ 2 F '+ \ 합계 \ limits_ {I} 2 * 10 ^ {len- 1}의 경우 '+ g'$
그런 다음 $이었다 재발 후마다 나는 완료 DFS를 $.
$의 F, G,에 약간의 트릭이 실현합니다 시간 $ 모든 구조를 넣어, 너무 얻기 위해 하나 직접 액세스 한 후 완료 DP 그의 전체 패키지 $의 F, G는 시간 $, 무슨 카드의 상한 고려하지 않았을 또는 추가 아무것도 기록 귀찮게.
WA1 : LONGLONG 입력 잊어 버렸습니다. .
WA2 : 모듈로 좋은 기록. . 모듈을 감소에 연연하지 마십시오, 또는 정말해야 범위를 방지하기 위해 엄격 연산의 수를 모듈로하려면, 고려 누출됩니다.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #INCLUDE <iostream> 2 #INCLUDE <cstdio> 3 #INCLUDE <CString을> 4 #INCLUDE <알고리즘> 5 #INCLUDE <cmath> 6 #DEFINE DBG (X) cerr << #x를 << "="X << << ENDL 7은 사용 공간의 성병; 8 타입 정의 긴 긴 LL; 9 타입 정의 를 두 번 DB; 10 의 typedef 쌍 < INT , INT > PII; (11) 서식 <유형 이름 T> T _min 인라인 (TA, TB) { 반환 은 <B를? A : B} 12템플릿은 <유형 이름 T> T _max 인라인 (TA, TB)를 { 반환 A> B를? A : B} 13 서식 <유형 이름 T> 인라인 CHAR MIN (T & A, TB) { 복귀 A> B (A = B? 1 ) : 0 } 14 서식 <유형 이름 T> 인라인 CHAR MAX (T & A, TB) { 반환 은 <B를 (A = B? 1 ) : 0 } 15 서식 <유형 이름 T> 인라인 공극 _swap (T & A, T 및 B) {A ^ = B ^ = A ^ = B} 16 서식 <유형 이름 T> 인라인 판독 T (T & X) { 17 , X = 0 ; INT의 F = 0 ;숯 C; 반면 (isdigit에 (c = getchar가 ())!) 경우 (c == ' - ' ) F = 1 ; 18 일 동안 (isdigit에 (c)) X = X * 10 + (c & 15 ), C = getchar가 (); 반환 F를 X = - X : X; 19 } 20 CONST의 INT의 P + 1E9 = 7 ; 21 INT의 빈 [ 20 ], BIN2 [ 20 ]; 22 구조체 thxorz { 23 INT의 F, G, H; 24 thxorz ( INT의 F = - 1 ,INT g = 0 , INT H = 0 ) (F) (F), g (g), H (높이)} { 25 (F)} [ 20 ] [ 7 ] [ 7 ]; 26 의 INT B [ 20 ]; 27 INT T; 28 LL의 L, R; // 실수 29 thxorz DP ( INT 렌 INT 합 INT 개조, INT의 제한) { 30 일 경우 (LEN!) 복귀 thxorz (합계 && 개조, 0 , 0 ); (31) 의 경우(제한 && ~ F [LEN] [합] [개조] .F!) 복귀 F [LEN] [합] [개조]; 32 의 INT NUM = 제한 B [LEN] : 9 ; 33 thxorz의 RET, TMP; ret.f = 0 ; 34 대 (등록 INT I = 0 ; I <= NUM; I ++) 경우 (I ^ 7 ) { 35 TMP = DP (len- 1 , SUM (+ I) % 7 (개조 * 10 + I) % 7 ) && I == NUM 제한; // mistake2 36 ret.f + = tmp.f; ret.f> = P && (ret.f- = P); 37 ret.g = (+ tmp.g 빈 [len- 1* * 1ll tmp.f의 %의 P *이 난 ret.g) % 이상 P; 38 ret.h = (BIN2 [len- 1 ] * 1ll * tmp.f % 포인트 * 난 + tmp.h + * 2 * 빈 [len- 1 ] * 1ll * tmp.g의 % 포인트 * 내가 ret.h을 + ) %의 P; 39 } 40 리턴 ? 제한 복귀 : [LEN] [합] [개조] = f를 RET; 41 } 42 인라인 INT 해결 (LL의 X) { 43 INT의 LEN = 0 ; 반면 (x)를, B [++ LEN] = % X 10 X / = 10 ; 44 리턴 DP (LEN, 0 , 0 , 1 ) .H; 45 } 46 (47) INT 의 main () { // freopen을 ( "test.in", "R", 표준 입력); // freopen을 ( "test.ans", "w", 표준 출력); 48 대 (등록 INT I = 0 , 입술 = 1 ; i가 <= 18 ; ++ I, 입술 = 입술 * 1ll * 10 빈 [I] = 입술, BIN2에 [I] = 입술 * 1ll * 입술 % % P) 피; (49) 판독 (T); 동안 (T -) 판독 (L), (R)의 printf (읽기 " % D \ 없음 " (해결 (R) -solve 1- ( 1 ) + P) %의 P); 50 반환 0 ; 51 }