bzoj2396神奇的矩陣 隨機化

2021-08-04 19:41:20 字數 1151 閱讀 2155

description

給出三個行數和列數均為n的矩陣a、b、c,判斷a*b=c是否成立。

input

題目可能包含若干組資料。

對於每組資料,第一行乙個數n,接下來給出三個n*n的矩陣,依次為a、b、c三個矩陣。

output

對於每組資料,若a*b=c成立,則輸出yes,否則no。每個答案佔一行。

sample input12

2100

sample output

nohint

對於90%的資料,n不超過100;

對於100%的資料,n不超過1000,矩陣中的數字大於等於0小於1000,資料組數不超過5組。

source

這題鬼畜。

我打了個暴力上去居然wa了?????????

我陣列開小居然wa??????

懵逼.jpg

正解隨機化,隨機乙個矩陣rnd,如果rnd*c=rnd*a*b,那麼幾乎a*b=c了。

問題是這還是n^3。

然後我們注意到矩陣乘法的意義,乙個n*m乘以乙個m*k的矩陣(m那裡一定要相同不然不能乘),得到的是乙個n*k的陣列。

所以他迴圈的時候是這樣的

i 1 n

j 1 m

k 1 k

然後我們發現可以把rnd變為一維的,就可以把乙個n消掉了= =。

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fd(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

const int n=1e2+5;

const int m=105;

int a[n][n],b[n][n],c[n][n],d[n],n;

int rnd[n],e[n];

inline void mul(int a[n],int b[n][n],int c[n])

fo(i,1,n)c[i]=tmp[i];

}inline bool pd()

int main()

}

BZOJ 2396 神奇的矩陣 矩陣 隨機

其實不要放過題目給出的每乙個資訊,就像這一道題,思考為什麼一定是矩陣,為什麼不是乙個簡單的數列之內的,說明解決這一道題就很用到矩陣的特殊性質。其中矩陣有乙個性質就是a b c,c的行數等於a的行數,c的列數等於b的列數,所以我們完全可以隨機構造乙個n行1列的舉證,然後利用矩陣乘法的結合律把矩陣變成n...

bzoj2396 神奇的矩陣

description 給出三個行數和列數均為n的矩陣a b c,判斷a b c是否成立。input 題目可能包含若干組資料。對於每組資料,第一行乙個數n,接下來給出三個n n的矩陣,依次為a b c三個矩陣。output 對於每組資料,若a b c成立,則輸出yes,否則no。每個答案佔一行。sa...

bzoj2396 神奇的矩陣

與51nod1140一樣。不過這題是多組資料的。坑。include include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i...