HDU2065 紅色病毒 問題(矩陣快速冪)

2021-09-25 14:45:55 字數 1075 閱讀 8693

題意:

中文題,不再描述。

分析:參考這篇部落格,寫的非常好,我也是看的的。

個人理解:

我把原文的狀態轉移方程又補充了一下。

為0是因為下乙個狀態不能由當前狀態得到。

然後提取出係數得到矩陣

const matrix p = ;
接下來就是然後建立乙個矩陣乘法函式

matrix multi(const matrix &a, const matrix &b)  // 矩陣乘法

}return c;

}

然後是快速冪部分

matrix pow_mod(ll n)    // 快速冪運算

return res;

}

最後輸出的時候這幾句是等效的

printf("case %d: %d\n", i, pow_mod(n).m[0][0]);

printf("case %d: %d\n", i, pow_mod(n).m[1][1]);

...

完整**:

#include #include #include using namespace std;

const int mod = 100;

typedef long long ll;

struct matrix;

const matrix e = ;

const matrix p = ;

matrix multi(const matrix &a, const matrix &b) // 矩陣乘法

}return c;

}matrix pow_mod(ll n) // 快速冪運算

return res;

}int main()

puts("");

}return 0;

}

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上傳播的 紅色病毒 不相上下...