題目大意:
給定三個n∗n
n*nn∗
n的矩陣a
aa,b
bb,c
cc,判斷是否a∗b
=c
a*b=c
a∗b=c。
其中n
≤1000
n≤1000
n≤1000
。分析:
我們隨機乙個n∗1
n*1n∗
1的矩陣r
rr,對於滿足上述式子的乙個答案,必然有a∗b
∗r=c
∗r
a*b*r=c*r
a∗b∗r=
c∗r。
而a ∗b
∗r=a
∗(b∗
r)
a*b*r=a*(b*r)
a∗b∗r=
a∗(b
∗r),都可以在o(n
2)
o(n^2)
o(n2
)做出。
**:
#include #include #include #include #include #define ll long long
const int maxn=1001;
using namespace std;
int n;
int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];
int rad[maxn],ans1[maxn],ans2[maxn],tmp[maxn];
bool check()
for (int i=1;i<=n;i++) ans2[i]=tmp[i];
for (int i=1;i<=n;i++)
for (int i=1;i<=n;i++) ans1[i]=tmp[i];
for (int i=1;i<=n;i++)
for (int i=1;i<=n;i++) ans1[i]=tmp[i];
int flag=1;
for (int i=1;i<=n;i++) if (ans1[i]!=ans2[i]) return 0;
return 1;
}void solve()
for (int i=1;i<=n;i++)
for (int i=1;i<=n;i++)
int flag=1;
for (int i=1;i<=20;i++) flag&=check();
if (flag) printf("yes\n");
else printf("no\n");
}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...