bzoj2396 神奇的矩陣

2021-08-01 16:56:34 字數 982 閱讀 6808

description

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

input

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

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

output

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

sample input

sample output

nohint

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

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

題解 隨機生成乙個n乘1的矩陣r

然後判斷a*b*r是否等於c*r,而前者相當於a*(b*r)

與後者一樣都可以在o(n2)的時間裡算出來

如果算出來的結果相等

a*b和c幾乎也相等。

**

#include

#define n 1005

#define ll long long

#define mo 1000000007

using

namespace

std;

int rnd[n],a[n][n],b[n][n],c[n][n],t[n],ans1[n],ans2[n];

int n;

inline

int read()

while(ch>='0'&&ch<='9')

return x*f;

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

for (int i=1;i<=n;i++) c[i]=ans[i];

}int main()

if (flag) puts("yes");else

puts("no");

}return

0;}

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...

bzoj2396 神奇的矩陣

再隨機生成乙個n 1的矩陣d,若 a b c 則顯然有 a b d c d 根據結合律,又有 a b d c d 由於 n n n 1 的複雜度是 o n 2 的,因此暴力乘法即可 程式的做法是判斷乘起來的矩陣所有數字之和與c是否相同,即求 a i k b k j 對a的每一列預處理求和,然後就可以...

BZOJ 2396 神奇的矩陣 矩陣 隨機

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