2,019m 예선 마늘 도로 3 D. 알리바바 도움 전투 SARS (어려운) (+ 많은 수의 나머지 오일러 내림차순)

알리바바 도움 전투 SARS (어려운)

  • 33.29 %
  •  1000MS
  •  262144K
 

현재, 과학자들에 의해 발견 된 세계에서 사스 바이러스, 바이러스 및 DNA, 시토신, 티민의 그 변종의 단일 가닥 쌍있다. 이 기능이 너무 약한 때문에 이것은 중요한 발견,하지만 바이러스의 가장 중요한 특징이지만.

이 문제를 해결하는 사고 능력과 과학 기술의 절차, 바이러스, 질병 관리 알리바바 그룹 협력 CN 센터의 특성을 찾기 위해. 질병 통제는 사스 바이러스의 DNA 서열의 수있을 수 있습니다이 기능에서 공부하는 알리바바 지금 당신에게 CN 센터에서 특별한 SARS 선임 연구원을 임명. 더 정확하게, 당신은 다음의 모든 조건을 만족 길이 있습니다 계산해야하는  n 개의 문자열의 수 n :

  1. A, T, C, G 성분 만 문자열
  2. A는 항상 짝수가 발생 (또는 발생하지 않을 수 있음)
  3. C는 시간의 짝수 발생 (또는 표시되지 않을 수도 있습니다)

경우  N-2 = N- = 2, 다음 조건 모두를 만족 문자열이다  (6). 6 :

TT, TG, GT, GG, AA, CC.

참고 :이 숫자가 매우 클 수 있기 때문에, 당신은 단지 줄 필요가  10 ^ 9 + 7 1. 0 9 + 결과 모듈 7.

입력 형식

입력 문서의 복수 준다  N- N-한다. 마지막 숫자  0 제로는 종료되었습니다.

출력 형식

각 입력 파일의  n 개의 수 (n)의 조건을 만족하는 출력 문자열  10 ^ 9 + 7 . 1 개 0 9 + 7 모듈 결과.

데이터 범위

n \ ^ {10 (10 ^ 5)} , N 1 0 ( 1 0 5 )

샘플 입력

1 
2 
3 
100 
0

샘플 출력

2 
. 6 
(20)는 
(113) 046 (907)는 




DFS를 사용하여 다시 법의 실행을 찾을 수 : 2 ^ N + 4 ^ n은
다음 많은 수를 처리하는 모듈로, 문자열을 읽어되어 페르마의 작은 정리 + 오일러 내림차순.
유사한 양식 + 오일러보다가 내려 많은 수를 취할 4,704 합 - HDU을


#INCLUDE <비트 / stdc ++ H.>
 #DEFINE MOD 1,000,000,007
 사용  스페이스 성병; 
타입 정의  LL; 

문자 S [ 100005 ]; 

{QMOD (LL A, B의 LL) LL 
    LL ANS = 1 ; % = MOD;
    반면 (b) {
         경우 (B & 1 ) = ANS ANS *는 % MOD; 
        B >> = 1 ; A *에게 %를 = MOD; 
    } 
    반환 ANS; 
} 
INT 의 main () 
{ 
    INT의 N, LEN, I;
    반면 (는 scanf ( " %의 S ' , S) && S [ 0 ]! = ' 0 ' ) { 
        LL의 C = 0 ; 
        LEN = 나 strlen (S);
         (I = 0 ; I <렌; 내가 ++ ) {
             INT X가 S [I] - ' 0 ' ; 
            C = C * 10 + (X);
            경우 (c> 1,000,000,006 )의 C % = 1,000,000,006 ; 
        } 
        (C) = ((C- 1 ) % 1,000,000,006 +1,000,000,006 ) % 1000000006 ; 
        의 printf ( " % LLD \ 없음 " (QMOD ( 2 , c) + QMOD ( 4 , c)) % MOD); 
    } 
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/yzm10/p/10963618.html