题目链接: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;
}

最新文章

  1. percona-toolkit中在线ddl
  2. JPA 教程
  3. java笔记--适配器模式的运用
  4. 实习感悟——SQL语句
  5. Eclipse中安装可以新建html文件的插件(Eclipse HTML Editor)
  6. php测试代码工具类
  7. 苹果ios、ipad加密视频播放器使用教程
  8. php怎样求一个数组中最长的
  9. MongoDB学习总结(五) —— 安全认证
  10. InputStream中通过mark和reset方法重复利用缓存
  11. Flask入门之Jinjia模板的一些语法
  12. Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
  13. day16:内置函数二
  14. 057 Hive项目案例过程
  15. JMeter做http接口功能测试
  16. ds18b20驱动及应用程序
  17. centos 离线安装Ambari
  18. HDU 2433 (最短路+BFS+剪枝)
  19. UVALive 6907 Body Building
  20. hdu 4602 Partition 矩阵快速幂

热门文章

  1. eclipse oxygen离线安装activiti
  2. thttpd 在S3C6410的移植-web服务程序的应用
  3. 现代C++ 基于范围的for和for_each语句
  4. jquery及相关兼容插件的版本搭配
  5. root用户无法切换到cdh的hive账号上
  6. Caused by: java.lang.ClassNotFoundException: com.njupt.libgdxbase.MainActivity
  7. select多选 multiple的使用
  8. 封装一个ViewPager真正的实现图片无限循环滚动带导航点
  9. Redis允许远程连接
  10. Random numbers