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