wq的矩阵
发布时间: 2017年11月14日 18:19 最后更新: 2017年11月14日 18:38 时间限制: 2000ms 内存限制: 128M
今天wq正在玩弄一个n×n矩阵
矩阵的所有数字初始值都是0,每次wq都会做下面的事情之一:
1.使第k行的所有数字变成v
2.使第k列的所有数字变成v
现在,wq想知道q次操作后的最终矩阵是什么
第一行一个整数T代表有T组测试数据
对于每组测试数据:
第一行两个整数 n,q(1≤n≤500,1≤q≤2×10^5) 分别代表矩阵大小,操作次数
接下来q行 每行三个整数 op,k,v(1≤op≤2,1≤k≤n,1≤v≤100).
如果 op=1, 把第k行的数字全部变为v
如果 op=2, 把第k列的数字全部变为v
对于每组测试数据
输出最终的矩阵
(每行相邻的两个数之间有一个空格)
1 3 3 1 2 3 2 2 1 1 1 3
3 3 3 3 1 3 0 1 0
----------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#define MAX 505
typedef struct op{
int tag;
int k;
int v;
}OP;
OP op1[200000],op2[1000];
int a[MAX][MAX]={0},ro[3][MAX]={0};
int main(){
int t,T,i,j,s,n,q;
scanf("%d",&T);
for(t=0;t<T;++t){
for(i=1;i<=n;++i){
ro[1][i]=0;
ro[2][i]=0;
}
scanf("%d %d",&n,&q);
for(i=0;i<q;++i){
scanf("%d %d %d",&op1[i].tag,&op1[i].k,&op1[i].v);
}
for(i=q-1,j=0;i>=0;--i){
if(!ro[op1[i].tag][op1[i].k]){
op2[j]=op1[i];
ro[op1[i].tag][op1[i].k]=1;
++j;
}
}
q=j;
for(j=q-1;j>=0;--j){
if(op2[j].tag==1){
for(s=1;s<=n;++s)
a[op2[j].k][s]=op2[j].v;
}
else {
for(s=1;s<=n;++s)
a[s][op2[j].k]=op2[j].v;
}
}
for(j=1;j<=n;++j){
printf("%d",a[j][1]);
a[j][1]=0;
for(s=2;s<=n;++s){
printf(" %d",a[j][s]);
a[j][s]=0;
}
printf("\n");
}
}
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------