演算法馬拉松18 B 非010串

2021-07-23 03:51:58 字數 1094 閱讀 7687

acm模版

這道題一開始一看,覺得是dp,後來發現資料太大,dp要死人的,於是想到了矩陣快速冪,(在網上看到有人說可以dp,不懂他是怎麼做的,但是感覺一定會超時啊)。

這裡首先我們需要找到遞推式:

……01:an

……10:bn

……00:cn

……11:dn

由此可以推出:

an+1=bn+cn

bn+1=dn(因為需要排除010的串)

cn+1=bn+cn

dn+1=an+dn

所以構造的單元矩陣也就出來了:

0 1 1 0

0 0 0 1

0 1 1 0

1 0 0 1

於是乎,ac之~~~

#include 

#include

const

int mod = 1e9 + 7;

const

int maxn = 62;

typedef

long

long ll;

typedef

struct

e;e d[maxn];

void mat_ab(e *a, e *b) // a*b-->a}}

}void mat_aa(e *a, e *b) // a^2-->b}}

}void init()

}ll solve(ll n)

for (ll i = 0; i < maxn; i++)

}for (int i = 0; i < 4; i++)

}return sum;

}int main ()

n -= 2;

init();

printf("%lld\n", solve(n));

return

0;}

《矩陣相關》

51Nod演算法馬拉松18 B 非010串

如果乙個01字串滿足不存在010這樣的子串,那麼稱它為非010串。求長度為n的非010串的個數。對1e9 7取模 最喜歡簽到題了。設f i j 表示到第i個點,末尾的狀態是j 01,00,10,11四個狀態 轉移很顯然。然後在轉成矩陣乘法就好了。include include include inc...

51nod 演算法馬拉松18 總結

第一次打馬拉松。a 一看題。什麼鬼。n 4竟然是無解,第乙個點給了乙個n 5的,好像是構造的挺有規律的樣子。那就偶數無解,奇數照著他的構造方法寫一發吧。怎麼a了?不管了。既然結束了還是要回來好好想一下是什麼情況的。偶數肯定是無解的,因為一共有n n 1 2 條邊,那麼每種顏色的邊出現次數相等的話,就...

51nod演算法馬拉松18總結

第一次打算法馬拉松。第乙個晚上後就有人ak實在把我嚇了一跳,後來十多個人ak了,幾乎想要放棄的感覺。a 構造題,首先可以證明n為偶數時是無解的。然後我在n為奇數的構造上花了點時間,後來觀察n 5時的答案發現構造方法如下 列舉i,然後給所有邊 i,j i j 按順序染色。首先i 1,那麼連出去的邊分別...