新秀杯热身赛-wq的矩阵

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;
}

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值