【bzoj5082】弗拉格 矩阵乘法
生活随笔
收集整理的這篇文章主要介紹了
【bzoj5082】弗拉格 矩阵乘法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
給你n個flag,你要把每個染色成紅黑白黃四色之一,滿足: 1.相鄰旗不能同色 2.白不能和黃相鄰,紅不能和黑相鄰 3.不能存在連續(xù)三個球依次是“黑白紅”或“紅白黑” 4.翻轉(zhuǎn)后相等視為等價 設不等價方案數(shù)為f(n),給定l,r,求 Sigma f(i),其中L<=i<=R模1000000007輸入
輸入兩個數(shù)l,r l, r ≤ 10^9輸出
輸出答案
樣例輸入
3 4
樣例輸出
23
題解
矩陣乘法
容易設出dp狀態(tài) $f[i][j][k]$ 表示前 $i$ 個flag,最后一個的顏色為 $j$ ,倒數(shù)第二個的顏色為 $k$ 的方案數(shù)。
顯然這個dp方程可以使用矩陣乘法來加速轉(zhuǎn)移,并使用計數(shù)器維護前綴和。
至于翻轉(zhuǎn)后相等視為等價的問題,易知:答案=(總方案數(shù)+翻轉(zhuǎn)后與原來相等的方案數(shù))/2。于是求出反轉(zhuǎn)后與原來相等的方案數(shù)即可。
容易發(fā)現(xiàn)偶數(shù)長度的中間兩個一定相同,因此不存在偶數(shù)長度的回文串。
對于奇數(shù)長度,發(fā)現(xiàn)題目條件的限制是對稱的(AB<=>BA,ABC<=>CBA),因此某長度為 $2k-1$ 的奇數(shù)長度回文串的個數(shù)即為長度為 $k$ 的串的個數(shù)。再次求 $\lceil\frac n2\rceil$ 的答案即可。
最后前綴相減即為最終答案。
時間復雜度 $O(9^3\log n)$
#include <cstdio> #include <cstring> #include <algorithm> #define mod 1000000007 using namespace std; typedef long long ll; struct data {ll v[9][9];data() {memset(v , 0 , sizeof(v));}ll *operator[](int a) {return v[a];}data operator*(data &a){data ans;int i , j , k;for(i = 0 ; i <= 8 ; i ++ )for(j = 0 ; j <= 8 ; j ++ )for(k = 0 ; k <= 8 ; k ++ )ans[i][j] = (ans[i][j] + v[i][k] * a[k][j]) % mod;return ans;} }A; data pow(data x , int y) {data ans;int i;for(i = 0 ; i <= 8 ; i ++ ) ans[i][i] = 1;while(y){if(y & 1) ans = ans * x;x = x * x , y >>= 1;}return ans; } void init() {int i;for(i = 0 ; i <= 8 ; i ++ ) A[i][0] = 1;A[1][5] = A[1][7] = 1;A[2][5] = A[2][7] = 1;A[3][6] = A[3][8] = 1;A[4][6] = A[4][8] = 1;A[5][1] = A[5][3] = 1;A[6][1] = A[6][3] = 1;A[7][2] = 1;A[8][4] = 1; } ll calc(int x) {if(!x) return 0;data T = pow(A , x - 1);ll ans = T[0][0] * 4;int i;for(i = 1 ; i <= 8 ; i ++ ) ans += T[i][0];return ans % mod; } int main() {int l , r;scanf("%d%d" , &l , &r) , l -- ;init();printf("%lld\n" , ((calc(r) + calc((r + 1) / 2) - calc(l) - calc((l + 1) / 2)) * 500000004 % mod + mod) % mod);return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/GXZlegend/p/7886580.html
總結
以上是生活随笔為你收集整理的【bzoj5082】弗拉格 矩阵乘法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: angular 4使用jquery 第三
- 下一篇: tomcat架构Pipeline和val