2065 "빨간 바이러스"문제의 빠른 전력

문제 설명
새로운 바이러스 때문에 "빨간 바이러스"로 알려진 비교의 확산과 전파 속도의 인터넷 '빨간 바이러스'의 의료 사회에서 발견,이 연구는 발견 한 바이러스의 가닥 DNA의 그 변종, 시토신 그 , 티민이 짝.
지금 길이 N의 문자열 만족의 상태가있다 :
; 만 캐릭터 A, B, C, D 네 개의 글자 (1)
, (2)는 항상 짝수가 발생 (또는 발생하지 않을 수있다)이
. (3) C 회 짝수 발생 (또는 발생하지 않을 수 있음),
조건을 만족하는 문자열의 개수를 계산하는 단계를 포함한다.
N = 2, 다음 조건 모두를 만족 문자열 6 :. BB, BD, DB, 경우 DD, AA, CC
이것 당신이 마지막 두 자리가 될 수 있습니다주는만큼, 매우 큰하고자하는 데이터입니다.
 
입력
각각 T의 제 1 입력 라인은 정수 시험 예 수가 다음 T 라인 데이터, 각 라인의 정수 N (1 <= N ^ 64 <2), 양 말단 T = 0을 나타낸다.
 
산출
마지막 두 각 테스트 케이스는, 출력 스트링의 개수는, 각 출력 빈 행 하였다.
 
샘플 입력
4 1 3 4 20 11 14 6 0 24
 
샘플 출력
사례 1 : 2 케이스 (2) : 케이스 3 (72) 32 케이스 4 : 0 1 케이스 56 케이스 2 : 케이스 3 (72) 56

 

참고 링크 : 이제 문제를 해결하는 것이 발견 뒷면에 ,,, 빠른 충분한 전력을 실행합니다.

빠른 미 : 빠른 전원

마지막 AC 코드 :

#INCLUDE <cstdio> 
의 typedef   INT의 LL;
 INT fastmi (a LL, LL의 b) { //이 신속 B 승 찾을 
    LL = ANS 1. , 베이스 = a 및
     그동안 (b) {
         IF (B . (1) ) ANS = (ANS * 자료 ) % 100 ;
         베이스 = ( 베이스 * 자료 ) % 100 ; 
        B >> = 1 ; // 여기 쓰기 B에주의하지 될 >> 1 후 무한 루프에있을 것 
    } 
    복귀 ANS; 
} 
INT 주 () {
    LL N, t, T; 
    반면 (는 scanf ( " %의 LLD " , T) && T) { 
        t = T;
        반면 (t-- ) { 
            는 scanf ( " %의 LLD " , N); 
            의 printf ( " 케이스 %의 LLD %의 LLD \ n " , TT의 (fastmi ( 4 , N- 1 ) + fastmi ( 2 , N- 1 )) % 100 ); 
        } 
        의 printf ( " \ n " ); 
    } 
    반환  0 ; 
}

요약 : 매우 복잡한 문제는, 그것을 해결하기가 매우 간단 나 수학의 힘을 다시 한 번 깨닫게 수 있습니다. . 법 fastmi 이유로서는 (4, N-1) + fastmi (2, N-1)? 난 단지 손 수에 의해, 당신은 법에 일관되게 테스트 케이스, 그래서 대담한 가정을 찾을 수 있다고 말할 수있다. 그 후, 일부는 포기,이 방법의 법칙의 수학적 유도에 의해 증명하지만, 유도 과정이 매우 복잡하고, 전원에 대한 신속한 솔루션 아이디어를 참조하십시오. 이 문제를 기록, 그냥 이렇게 아름다운 빠른 전원 알고리즘을 기억할 수 있었으면 좋겠어!

추천

출처www.cnblogs.com/heyour/p/12598569.html