1. 程式人生 > >Codeforces 691E題解 DP+矩陣快速冪

Codeforces 691E題解 DP+矩陣快速冪

題面

傳送門:http://codeforces.com/problemset/problem/691/E
E. Xor-sequences
time limit per test3 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given n integers a1,  a2,  …,  an.

A sequence of integers x1,  x2,  …,  xk is called a “xor-sequence” if for every 1  ≤  i  ≤  k - 1 the number of ones in the binary representation of the number xi xi  +  1’s is a multiple of 3 and for all 1 ≤ i ≤ k. The symbol is used for the binary exclusive or operation.

How many “xor-sequences” of length k exist? Output the answer modulo 109 + 7.

Note if a = [1, 1] and k = 1 then the answer is 2, because you should consider the ones from a as different.

Input
The first line contains two integers n and k (1 ≤ n ≤ 100, 1 ≤ k ≤ 1018) — the number of given integers and the length of the “xor-sequences”.

The second line contains n integers ai (0 ≤ ai ≤ 1018).

Output
Print the only integer c — the number of “xor-sequences” of length k modulo 109 + 7.

Examples
inputCopy
5 2
15 1 2 4 8
outputCopy
13
inputCopy
5 1
15 1 2 4 8
outputCopy
5
題目大意:給定長度為n的序列,從序列中選擇k個數(可以重複選擇),使得得到的排列滿足xi與xi+1異或的二進位制中1的個數是3的倍數。問長度為k的滿足條件的序列有多少種?

分析:

1.DP方程的推導

dp[i][j]表示前i位以j結尾的方案數

dp[i][j]=x=1idp[i1][x]
(bitcount(a[x] xor a[i])mod 31)
bitcount(x)表示x的二進位制中1的個數

2.矩陣快速冪的優化

我們發現,狀態轉移方程的形式類似矩陣乘法
因為可以這樣變形:dp[i][j]=x=1idp[i1][x]×(bitcount(a[x] xor a[i])mod 3==1)

所以狀態轉移方程可以寫成這樣
[dp[i][1]dp[i][2]dp[i][n]]=[1001111]×[dp[i1][1]dp[i1][2]dp[i1][n]]

右邊那個很多1和0 的矩陣是n×n的狀態轉移矩陣,第i行第j列為1代表bitcount(a[x] xor a[i])mod 31,否則為0
顯然對角線全部為1(一個數異或它本身為0)
在DP之前我們可以預處理這個矩陣

由於最終答案為j=1ndp[k][j],
狀態轉移方程可以改寫為

牛客小白月賽7 J 方格填色(狀壓DP+矩陣快速)

題目大意:給一個m*n的方格,每個格子可以是黑色或白色,要求左右相鄰兩格不能同時為白色,且相鄰兩列不能全為黑色,問可以有幾種情況數。 題目思路:由於資料範圍1<=m<=5,1<=n<=1e18,所以很容易看出是狀壓dp。由於他要求的都是對

BZOJ5298 CQOI2018 交錯序列 【DP+矩陣快速優化】*

BZOJ5298 CQOI2018 交錯序列 【DP+矩陣快速冪優化】 Description 我們稱一個僅由0、1構成的序列為”交錯序列”,當且僅當序列中沒有相鄰的1(可以有相鄰的0)。例如,000,001,101,都是交錯序列,而110則不是。對

CCF201409-5拼圖(狀態壓縮DP+矩陣快速) (骨牌覆蓋問題拓展 )

文章目錄 拼圖 題意: 分析: 拼圖 題意: 分析: 這是hiho1143 && hiho 1151&&1033 骨牌覆蓋 V2的拓展 搜尋

藍橋 壘骰子(dp+矩陣快速

壘骰子賭聖atm晚年迷戀上了壘骰子,就是把骰子一個壘在另一個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧祕:有些數字的面貼著會互相排斥!我們先來規範一下骰子:1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那

zoj 3690 DP+矩陣快速

題意:N個人站成一行,有M個數可供任意選擇。唯一要求是,當相鄰兩人取相同數時,這個數必須大於K。 dp[i][0] 表示第i個人取[1..k]的時候的排列種數,dp[i][1] 表示第i個人取[k+1..m]時候的排列種數,得到方程: dp[i][0]  =  dp[i-

Scout YYF I 概率dp + 矩陣快速

/* 題目描述:在一條道路上,每個位置有1個編號,編號分別是1 , 2 , ......現在有n(1 <= n <= 10)顆地雷,第i個分佈位置的 處的編號為x[i],其中1 <= x[i] <= 10000

POJ 3744 Scout YYF(概率DP+矩陣快速

Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6890 Accepted: 2004 Description YYF is a couragous scout.

bzoj2326(dp+矩陣快速)

這個化成dp[i]=dp[i-1]*bit+i就可以了,bit為10^位數。。 然後bit看起來不好轉移。。不過bit最多為18,可以分類列舉一下。。 /** *         ┏┓    ┏┓ *         ┏┛┗━━━━━━━┛┗━━━┓

count (類插頭DP+矩陣快速

題目大意:有n個點,編號為1~n。第i個點和第j個點之間有一條無向邊當且僅當|i-j|<=k。求這個圖的生成樹個數。k≤5,n≤1015k≤5,n≤1015。 題目分析:Coming在他初二時的資料裡找到的一道題,是我校上古大神cdc給的。我不得不吐

ICPC-概率DP-ZOJ3329(概率DP+解未知數) POJ3744(概率DP+矩陣快速) HDU4089 HDU4035 HDU

這題我先留個坑。晚點補題解 ZOJ3329 https://vjudge.net/problem/ZOJ-3329 這題注意:maxn必須設700+,因為,他說數值可能大於n(500),我覺得1000肯定夠 #include<bits/stdc++

bzoj1009-HNOI2008 GT考試 字符串dp+矩陣快速

表示 我們 ios inline gt考試 urn zoj 時間 ostream 題面描述 阿申準備報名參加\(GT\)考試,準考證號為\(N\)位數\(x_1,x_2,...,x_n\ (0\leq x_i\leq 9)\),他不希望準考證號上出現不吉利的數字。 他的