문제 보고서에 cometoj # 4D 합 솔루션

주제 포털

[제목] 효과

[분석] 아이디어

이 문제는 트릭 질문 [재미 .JPG를]입니다 실제로 비트 DP의 수있을 것으로 보인다

의 두 숫자가 같은 접두사가있는 경우, 단지 조금 다른, 다음 $ f를 $의 해당 값이 달라야 괜찮은 좋은 무엇을, 분석해 보겠습니다. 그 자리 $ i가 [0,9] $는 $ f를 $ 값 $ \ sum_ {I = 1}의 합에 대응에 \ 10 다른 한 자리 숫자를 들면 ^ {9} 나는 45 $를 =. $ \ sum_ 들어 I = {1} ^ {X} F (I) $, 우리는 $ [1,9], [10,19], [-20,29-] ...... [(\ lfloor의 \의 FRAC {로 나누어 N} {10} \ rfloor-1) * 10 \ lfloor \ FRAC {N} {10} \ rfloor * 10-1] $는 응답은 N $ \ lfloor의 \의 FRAC {} {10} \ rfloor * 45 $이고 . 잔여 $의 n \의 % 10 + 1 $ 우리 $ F $의 값을 계산하고, 시간 제한을 방지하기 위해, 별도 합계 개수, 우리는 {N} (\ lfloor의 \의 FRAC {10} \ rfloor f를 약 $ 변환 할 수 * 10 I +) = ({N} F (\ lfloor의 \ FRAC에 {10} \ rfloor * 10) + I) \ 10 % (전 [0, n \ % 10]에서)을 $ \

이어서 매우 간단한 응답 요청에 $ \의 sum_ I = {1} ^ {R} (F) (I) - \ sum_ J = {1} ^ {- 1} L F (j) $ 캔.

[] 코드 구현

1 #INCLUDE <cstdio>
 2 #INCLUDE <iostream>
 3 #INCLUDE <CString을>
 4 #INCLUDE <알고리즘>
 5 #INCLUDE <cmath>
 6 #INCLUDE <큐>
 7  #DEFINE의 g () getchar가 ()
 8  #DEFINE의 RG 레지스터
 9  #DEFINE의 이동 (I는은 b)에 대한 (RG의 INT 난 =; 나는 <= B를 단계; 내가 ++)
 10  #DEFINE 백 (I, a가, b) (RG의 인터넷 용 난 =; I> = B; 난 -)
 11  #DEFINE의 DB 이중
 12  #DEFINE이 줄게 긴 길이
 13  #DEFINE IL 인라인
 14  #DEFINE PF printf의
 15  #DEFINEMEM (a, b)가 memset (A, B를 sizeof (a))
 (16)  를 사용  스페이스 성병;
17  LL의 FR () {
 18      = w LL 0 , Q = 1 ;
19       CH = g ();
20      동안 (CH2 < ' 0 ' || CH> ' 9 ' ) {
 21 일          경우 (CH2 == ' - ' ) Q = - 1 ;
22          CH = g ();
23      }
 24      동안 (CH2> = ' 0 ' && CH <=에서 ' 9' ) (w = w << 1 ) + (w << 3 ) + CH- ' 0 ' , CH = g ();
25       * w의 Q;
26  }
 27  INT의 T;
28  LL의 L, R;
29 일리노이 INT는 (LL의 X) {해결
 30      지능 이 [ 20 ], L = 0 , R = 2 ;
31 일      동안 (X)는 [++ L] = % X 10 X / = 10 ;
32      반면 (R <= L) {
 33          백 (I, L, R)는 [I]가 = (A [I]는 [I-+ 1 %의])10 ,
 34은          그동안 (A [L] == 0 - && L> R & LT) L // 제로에게 최고의 제거 
35          R & LT ++ ;
 36      }
 37 [      리턴 A [L]
 38은  }
 39  IL 작업 LL (LL X) {
 40      IF (X < 10 ) {LL ANS = ( . 1 + X) * X >> 1. , 반환 ANS} // 일본어 문장은 10 미만 
41 인      LL ANS = (X / 10 ) * (45) , B = (X / 10 ) * (10) ,
 (42)은      RG 용 의 INT A = % X 10,는 C = (B) 해결;
43      이동 (I, 0 , a) + = ANS 1ll * (C + I) % 10 ;
44      리턴 ANS;
45  }
 46  INT 의 main () {
 47      // freopen을 ( "", "R", 표준 입력);
48      // freopen을 ( "", ""w, 표준 출력); 
(49)      T = ( INT ), FR ();
50      동안 (T-- ) {
 51          리터의 FR = (); R = FR ();
52          PF ( " % LLD \ 없음 " 직장 (R) -work 1- ( 1 ));
53      }
 54      반환  0;
55 }
코드는 여기 찌를

추천

출처www.cnblogs.com/THWZF/p/11587103.html