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於是乎,ac之~~~0 0 0 1
0 1 1 0
1 0 0 1
#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,那麼連出去的邊分別...