新秀杯热身赛-wq的矩阵

来源:互联网 发布:照片白边框软件 编辑:程序博客网 时间:2024/05/16 08:09

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

对于每组测试数据 
输出最终的矩阵
(每行相邻的两个数之间有一个空格)

13 31 2 32 2 11 1 3
3 3 33 1 30 1 0
----------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>#define MAX 505typedef 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;}

-------------------------------------------------------------------------------------------------------------------------------




原创粉丝点击