bzoj2126 排斥反應 矩陣乘法

2021-07-10 11:31:34 字數 943 閱讀 5141

發現p很小而q很大。。矩陣乘法這麼明顯的提示。

不過轉化還是很巧妙的。將所有的數變成p行q列的矩陣,然後就變成求從中取出一些點使得沒有點相鄰(包括同一行的最前面和最後面也算相鄰)。

首先可以得到某一列沒有相鄰的狀態(當p=10時有123種),然後就可以用矩陣乘法加速得到第一行轉移到最後一行的方案數辣!!然後得到ans。

ac**如下:

#include#include#include#define mod 19921107

#define n 155

#define ll long long

using namespace std;

struct matrixa,b; int cnt,n,m,bin[15],f[n];

matrix tms(matrix x,matrix y)

return z;

}void dfs(int k,int now)

dfs(k+1,now); dfs(k+2,now|bin[k-1]);

}int main()

for (i=1; i<=cnt; i++)

for (j=1; j<=cnt; j++) if (!(f[i]&f[j])) a.p[i][j]=1;

memcpy(b.p,a.p,sizeof(a.p));

for (i=m-2; i; i>>=1,a=tms(a,a)) if (i&1) b=tms(b,a);

int ans=0;

for (i=1; i<=cnt; i++)

for (j=1; j<=cnt; j++) if (!(f[i]&f[j])) ans=(ans+b.p[i][j])%mod;

printf("%d\n",ans);

return 0;

}

by lych

2016.3.13

bzoj4517 錯排 組合)

求有多少種長度為 n 的序列 a,滿足以下條件 1 n 這 n 個數在序列中各出現了一次 若第 i 個數 a i 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 10 9 7 取模。第一行乙個數 t,表示有 t 組資料。接下來 t 行,每行兩個整數 n...

BZOJ4517 排列計數(錯排公式)

從開始看這題到現在,已經過了30多把lol的時間了。話說今天又有一道排列計數的題讓我懵逼。題面題意 問有多少長為n的排列a,恰好有m個位置存在a i i。我們列舉這n m個a i i位置,有cm n 種情況。對於x個數的排列,不存在a i i的方案數設為f x 經過簡單的打表可以發現f i f i ...

BZOJ5368 Pkusc2018 真實排名

time limit 10 sec memory limit 256 mb 小c是某知名比賽的組織者,該比賽一共有n名選手參加,每個選手的成績是乙個非負整數,定義乙個選手的排名是 成績不小於他的選手的數量 包括他自己 例如如果333位選手的成績分別是 1,2,2 那麼他們的排名分別是 3,2,2 擁...