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