hdu_5671 矩阵行列移动等
来源:互联网 发布:蚁群算法matlab 编辑:程序博客网 时间:2024/06/05 12:00
有一个n行m列的矩阵(1≤n≤1000,1≤m≤1000),在这个矩阵上进行q (1≤q≤100,000) 个操作:1 x y: 交换矩阵M的第x行和第y行(1≤x,y≤n);2 x y: 交换矩阵M的第x列和第y列(1≤x,y≤m);3 x y: 对矩阵M的第x行的每一个数加上y(1≤x≤n,1≤y≤10,000);4 x y: 对矩阵M的第x列的每一个数加上y(1≤x≤m,1≤y≤10,000);
官方题解:
对于交换行、交换列的操作,分别记录当前状态下每一行、每一列是原始数组的哪一行、哪一列即可。
对每一行、每一列加一个数的操作,也可以两个数组分别记录。注意当交换行、列的同时,也要交换增量数组。
输出时通过索引找到原矩阵中的值,再加上行、列的增量。
复杂度O(q+mn)
#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <cmath>#include <algorithm>using namespace std ;const int maxn = 1005 ; int t ; int a[maxn],b[maxn] ;long long c[maxn],d[maxn] ;long long arr[maxn][maxn] ; int n , m ,q ; int main(){scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&q) ; int maxx = max(n,m) ; for(int i = 1 ; i <= maxx ; i++){a[i] = i ; b[i] = i ;c[i] = 0 ; d[i] = 0 ; }for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= m ; j++){scanf("%I64d",&arr[i][j]) ; }}while(q--){int i , j , k ; scanf("%d%d%d",&i,&j,&k);if(i==1){swap(a[j],a[k]) ;}else if(i==2){swap(b[j],b[k]) ;}else if(i==3){c[a[j]] += k ; }else {d[b[j]] += k ; }}for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= m ; j++){printf("%I64d",arr[a[i]][b[j]]+c[a[i]]+d[b[j]]) ;if(j!=m)printf(" ");}printf("\n");}}return 0 ; }
0 0
- hdu_5671 矩阵行列移动等
- 行列转换/矩阵转换
- 行列转换/矩阵转换
- 对称矩阵行列转换
- C#矩阵行列数
- HDU5671矩阵行列交换
- 【矩阵】清除行列
- 矩阵键盘行列扫描
- 行列互换矩阵
- opencv 矩阵行列求和
- Matlab矩阵行列变换
- 求积分图像矩阵行列+1改变代码忘记变为width+1等错误
- 矩阵行列序的问题
- poj 3735 矩阵行列变换
- CCI 1.7 矩阵行列清零
- 行列递增矩阵的查找
- latex 矩阵叫行列编号
- 遇0清除矩阵行列
- swap函数
- Python核心编程 第六章练习
- 回文字符串
- 数据结构之链表
- 链接错误-库冲突(libcmt.lib和libcmtd.lib)
- hdu_5671 矩阵行列移动等
- SCI论文回复审稿人意见
- Max Script|操作材质编辑器
- ant 入门使用指南
- Android模拟器修改hosts
- vs2010 转换到 COFF 期间失败
- 深入理解Linux内核day01--内存寻址
- APK瘦身实践
- 栈之计算表达式值