吉首大学校の人種A SARSウイルス(オイラー降順)

リンク:https://ac.nowcoder.com/acm/contest/925/A
出典:牛オフネットワーク

タイトル説明

現時点では、科学者によって発見され、世界のSA​​RSウイルスは、ウイルスやDNA、シトシン、チミンのその変種の一本鎖が対になっています。この機能が弱すぎるので、これは、主要な発見ではなく、ウイルスの最も重要な機能ですが。

この問題を解決するための思考と科学技術の手続きの力で、疾病管理アリババグループの協力のためのウイルスの特性を知るためには、CNセンター、。アリババは現在、この機能で勉強する疾病管理のためのCNセンターで特別なSARS上級研究員は、SARSウイルスのDNA配列の数であってもよいあなたを任命します。より正確には、次のすべての条件が長さnの文字列の数でカウントする必要があります。

  1. A、T、C、G組成物の文字列のみ
  2. Aは、偶数回の発生(又は生じなくてもよいです)
  3. Cは、偶数回の発生(又は表示されなくてもよいです)

n = 2の場合、以下のすべての条件が満たさ列6です。

TT、TG、GT、GG、AA、CC。

注意:この数は非常に大きくなる可能性があるので、あなただけの10 ^ 9 + 7モジュロの結果を与えることができます。

説明を入力します。

入力(以下10基)の複数の組は、それぞれ、整数N-ライン:0 <N- < 10 10 。5 10105

出力説明:

10 ^ 9 +7結果を出力文字列の条件を満たし、Nのそれぞれの入力ファイルの数を法。
例1

エントリー

コピー
1 
2 
100

輸出

コピー
2 
6。
113 046 907 



そのイタリア:トピックの数のシーケンス番号を満たす
アイデア:我々は、各文字の終わりの数の数を計算する必要があり、我々は2つのカテゴリに分けることができる((T、G)を、( A、C))、 Tは、私たち一人一人の最後にGの文字は、隔月、二回、C二重の手紙をオンにしますが、実際には、我々は、C最後に、私たちはそう、あまりにも、最後にT、G、T、Gを置くことができています
終了時にAC []はAC []は末尾にTGであるTGであると仮定
AC [N-] = AC [N - 2]×2 + TG [N - 2] * 2;
TG [N-] = AC [N - 1] * 2 + TG [N-1] * 2 ;
最後に、我々は、式が等しい簡素化することができます (2 ^(N-1)
)*(2 ^(N-1)+1) 私たちのnは、特に大きな理由は、私がここで使用しますオイラー降順
(^ N)%MOD = (^(B%ファイ(MOD)+ MOD))%MOD
<ビット/ STDC ++ H>の#include
 の#define MAXN 1000005
 の#define MOD十億七
 使用 名前空間STDを、
typedefの長い 長いLL。
チャーSTR [MAXN]。
LLのbig_number(CHAR S []、LLのM){ 
    LLのNUM = 0 以下のためにint型私は= 0 ; S [i]を=!' \ 0 ' ;私は++ ){ 
        NUM = NUM * 10 +(S [i]が- ' 0 ' ); 
        NUM%= M。
    } 
    リターンNUM; 
} 
LL quick_pow(LLのX、LLのY){ 
    LL ANS = 1 一方、(Y){
         場合(Y&1)ANS =(ANS * X)%MOD。
        X =(X * X)%MOD。
        Y = Y / 2 
    } 
    戻りANS。
} 
INT (){主
     ながら(CIN >> STR)
    { 
        int型フラグ= 0 もし((STR [STRLEN(STR) - 1 ] - ' 0 ')%2)フラグ= 1
        LL NUM = big_number(STR、mod- 1 )。 
        // coutの<< "NUM:" << NUM <<てendl; 
        LLダ= quick_pow(2、num- 1 + mod- 1 )。
        // 場合(フラグ%2)DA =(DA * 2)%のMOD。
        COUT <<(DA *(DA + 1))%のMOD << " の\ n " 
    } 
}

 

おすすめ

転載: www.cnblogs.com/Lis-/p/11072032.html
おすすめ