リンク:https://ac.nowcoder.com/acm/contest/925/A
出典:牛オフネットワーク
タイトル説明
現時点では、科学者によって発見され、世界のSARSウイルスは、ウイルスやDNA、シトシン、チミンのその変種の一本鎖が対になっています。この機能が弱すぎるので、これは、主要な発見ではなく、ウイルスの最も重要な機能ですが。
この問題を解決するための思考と科学技術の手続きの力で、疾病管理アリババグループの協力のためのウイルスの特性を知るためには、CNセンター、。アリババは現在、この機能で勉強する疾病管理のためのCNセンターで特別なSARS上級研究員は、SARSウイルスのDNA配列の数であってもよいあなたを任命します。より正確には、次のすべての条件が長さnの文字列の数でカウントする必要があります。
- A、T、C、G組成物の文字列のみ
- Aは、偶数回の発生(又は生じなくてもよいです)
- 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
輸出
コピー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 " 。 } }