矩阵模拟——空间换时间
发布日期:2021-06-29 11:10:30 浏览次数:2 分类:技术文章

本文共 1486 字,大约阅读时间需要 4 分钟。

hud5671;模拟题;

题目大意;输入一个矩阵的行列和要执行操作的步数;
有四种操作;
1 x y;就是把x,y行进行交换;
2 x y;就是把x,y列进行交换;
3 x y;就是把x行的所有元素都加y;
4 x y;就是把x列的所有元素都加y;

应该是道很水的模拟题;但是一提交直接超时;搞了大半天才知道不能用常规方法做 ;

竟然用空间换时间的方法;
直接贴代码;

#include
int s[1005][1005],h[1005],l[1005];//h表示行的交换,l表示列的交换;int main(){ int t, t1,i, j, k, n, m,q,x,y,o; scanf("%d",&t1); while(t1--) { //printf("hhuii\n"); int x1[1005]={0},x2[1005]={0};//控制元素加减的;x1表示每行的加减,x2表示每列的加减 scanf("%d %d %d",&n,&m, &q); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) scanf("%d",&s[i][j]); for(i = 1; i <= n; i++)//对应的行的下标 h[i] = i; for(i = 1; i <= m; i++) l[i] = i; while(q--) { scanf("%d %d %d",&k,&x,&y); if(k == 1) { t = h[x]; h[x] = h[y]; h[y] = t; } if(k == 2) { t = l[x]; l[x] = l[y]; l[y] = t; } if(k == 3) { x1[h[x]] += y; } if(k == 4) { x2[l[x]] += y; } } for(i = 1; i <= n; i++) { for(j = 1; j < m; j++) { printf("%d ",s[h[i]][l[j]]+x1[h[i]]+x2[l[j]]); } printf("%d",s[h[i]][l[m]]+x1[h[i]]+x2[l[m]]); printf("\n"); } } return 0 ;}

特别注意这题很容易超时的;输出的时候如果加if来判断输出空格那也会超时的;

转载地址:https://blog.csdn.net/zw1996/article/details/52124514 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:sort对字符串排序
下一篇:尺取法1——加set,map

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月30日 17时35分24秒