日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BNU 34974 MATLAB大法好

發布時間:2025/3/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BNU 34974 MATLAB大法好 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=34974

MATLAB大法好

?Time Limit:?8000ms Memory Limit:?65536KB 64-bit integer IO format:?%lld????? Java class name:?Main

MATLAB大法好,天滅C++,退C保平安,人在做,天在看,大段循環留禍患,內存泄露電腦滅,跳出遞歸保平安。誠心誠念矩陣好,批量操作平安保,兩行代碼問題解,算法查錯有保障。眾生都是碼農命,老板PUSH忘前緣。MATLAB弟子說真相,教你脫險莫拒絕,上網搜索九評Bjarne Stroustrup,有*真*相。

大家都知道,用MATLAB做矩陣計算是非常方便的。比如你想算矩陣A的轉置AT(即將A矩陣行列對調,元素aij變為aji),只需敲A’ 即可,而在C或C++中,你必須寫循環或者——什么都不用做!再比如你想對A中的每個元素都加1,在MATLAB中可以輕松地寫作A.+1,而在C或C++中,你照樣要寫循環。

現在定義一個矩陣運算:

如果A是一個?m?×?n?的矩陣,而B是一個?p?×?q?的矩陣,那么則是一個?mp?×?nq?的矩陣:

?

現給出矩陣A、B,求(AB)((AT).+1(BT).+1)。其中,前兩個括號之間表示正常的矩陣乘法,的運算優先級最低。

Input

第一行為數據組數t(t<=10)。

接下來,對每組數據:

第一行為4個整數m,n,p,q,1<=m,n,p,q<=50,分別代表矩陣A、B的行、列數。接下來為按照行列的2個矩陣A,B。矩陣元素為大小不超過100的非負整數。

Output

按照行列順序輸出結果矩陣,行內元素之間由空格隔開,行末無空格。

Sample Input

2 1 1 1 1 1 1 1 2 2 2 1 0 1 2 0 1

Sample Output

4 16 10 6 4

分析:昨天比賽的時候寫了一下,超時了。今天又看了一下,發現

(AB)((AT).+1(BT).+1) = [ A * ( ?(AT).+1) ] ???[?B * ( ?(BT).+1)]。這樣經過轉化就好寫了。

#include<stdio.h> #define N 55 #define M 2550 typedef long long LL; LL a[N][N], b[N][N], A[N][N], B[N][N]; LL ans[M][M]; int main() {int t, m, n, p, q, i, j;scanf("%d",&t);while(t--){scanf("%d%d%d%d",&m,&n,&p,&q);for(i = 0; i < m; i++)for(j = 0; j < n; j++)scanf("%lld", &a[i][j]);for(i = 0; i < p; i++)for(j = 0; j < q; j++)scanf("%lld", &b[i][j]);for(i = 0; i < m; i++)for(j = 0; j < m; j++){A[i][j] = 0;for(int x = 0; x < n; x++)A[i][j] += a[i][x] * (a[j][x] + 1);}for(i = 0; i < p; i++)for(j = 0; j < p; j++){B[i][j] = 0;for(int x = 0; x < q; x++)B[i][j] += b[i][x] * (b[j][x]+1);}for(i = 0; i < m*p; i++)for(j = 0; j < m*p; j++){int x = i / p;int y = j / p;int yy = j % p;int xx = i % p;ans[i][j] = A[x][y] * B[xx][yy];}for(i = 0; i < m * p; i++){for(j = 0; j < m*p - 1; j++)printf("%lld ",ans[i][j]);printf("%lld\n",ans[i][j]);}}return 0; }

總結

以上是生活随笔為你收集整理的BNU 34974 MATLAB大法好的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。