醫學界發現的新病毒因其蔓延速度和internet上傳播的"紅色病毒"不相上下,被稱為"紅色病毒",經研究發現,該病毒及其變種的dna的一條單鏈中,胞嘧啶,腺嘧啶均是成對出現的。
現在有一長度為n的字串,滿足一下條件:
(1) 字串僅由a,b,c,d四個字母組成;
(2) a出現偶數次(也可以不出現);
(3) c出現偶數次(也可以不出現);
計算滿足條件的字串個數.
當n=2時,所有滿足條件的字串有如下6個:bb,bd,db,dd,aa,cc.
由於這個資料肯能非常龐大,你只要給出最後兩位數字即可.
每組輸入的第一行是乙個整數t,表示測試例項的個數,下面是t行資料,每行乙個整數n(1<=n<2^64),當t=0時結束.
對於每個測試例項,輸出字串個數的最後兩位,每組輸出後跟乙個空行.41
420113
142460
1: 2
case 2: 72
case 3: 32
case 4: 0
case 1: 56
case 2: 72
case 3: 56
以a和c的奇偶分四個類,ac都為偶數,a奇c偶,a偶c奇,ac都為奇數
串長度的增加可以理解為在後面新增乙個字元
於是可以定義乙個二維陣列對贏上面四個類
f[n][0];ac都為偶數
f[n][1];a奇c偶
f[n][2];a偶c奇
f[n][3];ac都為奇數
可以看出
f[n][0]=2f[n-1][0]+f[n-1][1]+f[n-1][2]
f[n][1]=2f[n-1][1]+f[n-1][0]+f[n-1][3]
f[n][2]=2f[n-1][2]+f[n-1][0]+f[n-1][3]
f[n][3]=2f[n-1][3]+f[n-1][1]+f[n-1][2]
不過當n很大的時候還是要算很久,題目要最後兩位,哪一般是有規律的
可以打表找規律…
#include#include#include#include#include#include#define ll long long
#define mod 100000
using namespace std;
/*ll a[200],b[200],c[200],d[200];
void init()
}*/int main()
; ll b[20]=;
ll n,x;
while(~scanf("%lld",&n)&&n)
putchar('\n');
}}
hdu 2065 紅色病毒 問題
複習母函式,發現這道題可以用矩陣快速冪。然後做了一下 母函式 看起來好複雜的樣子 列dp方程,構造矩陣 dp n dp i 0 表示放到了第i位,前i位中有 偶數個a,有 偶數個c dp i 1 表示放到了第i位,前i位中有 奇數個a,有 偶數個c dp i 2 表示放到了第i位,前i位中有 偶數個...
hdu 2065 紅色病毒 問題
problem description 醫學界發現的新病毒因其蔓延速度和internet上傳播的 紅色病毒 不相上下,被稱為 紅色病毒 經研究發現,該病毒及其變種的dna的一條單鏈中,胞嘧啶,腺嘧啶均是成對出現的。現在有一長度為n的字串,滿足一下條件 1 字串僅由a,b,c,d四個字母組成 2 a出...
hdu2065 紅色病毒 問題
思路 先暴力打個表,然後找規律.include includeint main int b 5 4 int64 n,m while scanf d t eof t printf n return 0 description 醫學界發現的新病毒因其蔓延速度和internet上傳播的 紅色病毒 不相上下...