您的位置:首页 > 其它

HDOJ 5671-Matrix【矩阵的变换】

2016-05-17 11:47 363 查看

Matrix

Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 1049 Accepted Submission(s): 434

[align=left]Problem Description[/align]
There is a matrix M
that has n
rows and m
columns (1≤n≤1000,1≤m≤1000).Then
we perform q(1≤q≤100,000)
operations:

1 x y: Swap row x and row y (1≤x,y≤n);

2 x y: Swap column x and column y (1≤x,y≤m);

3 x y: Add y to all elements in row x (1≤x≤n,1≤y≤10,000);

4 x y: Add y to all elements in column x (1≤x≤m,1≤y≤10,000);

[align=left]Input[/align]
There are multiple test cases. The first line of input contains an integer
T(1≤T≤20)
indicating the number of test cases. For each test case:

The first line contains three integers n,
m
and q.

The following n
lines describe the matrix M.(1≤Mi,j≤10,000)
for all (1≤i≤n,1≤j≤m).

The following q
lines contains three integers a(1≤a≤4),
x
and y.

[align=left]Output[/align]
For each test case, output the matrix
M
after all q
operations.

[align=left]Sample Input[/align]

2
3 4 2
1 2 3 4
2 3 4 5
3 4 5 6
1 1 2
3 1 10
2 2 2
1 10
10 1
1 1 2
2 1 2


[align=left]Sample Output[/align]

12 13 14 15
1 2 3 4
3 4 5 6
1 10
10 1

Hint Recommand to use scanf and printf


[align=left]Source[/align]
BestCoder Round #81 (div.2)

解题思路:
题目大意:

有一个nn行mm列的矩阵(1 \leq n \leq 1000 ,1 \leq m \leq 1000 )(1≤n≤1000,1≤m≤1000),在这个矩阵上进行qq  (1 \leq q \leq 100,000)(1≤q≤100,000) 个操作:

1 x y: 交换矩阵MM的第xx行和第yy行(1 \leq x,y \leq n)(1≤x,y≤n);
2 x y: 交换矩阵MM的第xx列和第yy列(1 \leq x,y \leq m)(1≤x,y≤m);
3 x y: 对矩阵MM的第xx行的每一个数加上y(1 \leq x \leq n,1 \leq y \leq 10,000)y(1≤x≤n,1≤y≤10,000);
4 x y: 对矩阵MM的第xx列的每一个数加上y(1 \leq x \leq m,1 \leq y \leq 10,000)y(1≤x≤m,1≤y≤10,000);


对于矩阵来说,我们把他输出的坐标顺序记录下就行了。行和列都要记录。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
struct node
{
LL wei;
LL bei;
}num[1005];
struct node2
{
LL lie;
LL bb;
}numline[1005];
LL map[1005][1005];
void init(LL n,LL m)
{
for(LL i=1;i<=n;i++)
{
num[i].wei=i;
num[i].bei=0;
}
for(LL i=1;i<=m;i++)
{
numline[i].lie=i;
numline[i].bb=0;
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
LL n,m,p;
scanf("%lld%lld%lld",&n,&m,&p);
init(n,m);
for(LL i=1;i<=n;i++)
{
for(LL j=1;j<=m;j++)
{
scanf("%lld",&map[i][j]);
}
}
while(p--)
{
LL biao,xx,yy;
scanf("%lld%lld%lld",&biao,&xx,&yy);
if(biao==1)
{
node tt;
tt=num[xx];
num[xx]=num[yy];
num[yy]=tt;
}
else if(biao==2)
{
node2 tt;
tt=numline[xx];
numline[xx]=numline[yy];
numline[yy]=tt;
}
else if(biao==3)
{
num[xx].bei+=yy;
}
else
{
numline[xx].bb+=yy;
}
}
for(LL i=1;i<=n;i++)
{
for(LL j=1;j<=m;j++)
{
if(j==1)
printf("%lld",map[num[i].wei][numline[j].lie]+num[i].bei+numline[j].bb);
else
printf(" %lld",map[num[i].wei][numline[j].lie]+num[i].bei+numline[j].bb);
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: