CF631B Print Check题解

解法一(模拟)

思路

输入 x,y,zx,y,z,判断(其中 mpi,jmp_{i,j} 表示第 ii 行第 jj 列的兵种):

  • x=1x=1:
for(int j=1;j<=m;j++){
	mp[y][j]=z;
}
  • x=1x=1
for(int j=1;j<=n;j++){
	mp[j][y]=z;
}

最后依次输出 mpi,jmp_{i,j} 即可。

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,q;
int mp[5010][5010];
int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=q;i++){
		int x,y,z;
		cin>>x>>y>>z;
		if(x==1){
			for(int j=1;j<=m;j++){
				mp[y][j]=z;
			}
		}
		else{
			for(int j=1;j<=n;j++){
				mp[j][y]=z;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<mp[i][j]<<' ';
		}
		cout<<endl;
	}
	return 0;
}

加上去,TLE 了,要怎么优化呢?

解法二

可以对解法一进行一个优化。

思路

定义一个结构体 vv,这个结构体包含两个变量:a,ta,t。其中 aa 表示兵种,tt 表示时间。

vv 来定义两个数组:l[5010],h[5010]l[5010],h[5010]ll 表示列,hh 表示行。

最后在输出时,做个判断(ii 表示第 ii 行,jj 表示第 jj 列):

if(h[i].t>l[j].t){
	cout<<h[i].a<<' ';
}
else{
	cout<<l[j].a<<' ';
}

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,q;
struct{
	int a,t;
}l[5010],h[5010];
int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=q;i++){
		int x,y,z;
		cin>>x>>y>>z;
		if(x==1){
			h[y].a=z;
			h[y].t=i;
		}
		else{
			l[y].a=z;
			l[y].t=i;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(h[i].t>l[j].t){
				cout<<h[i].a<<' ';
			}
			else{
				cout<<l[j].a<<' ';
			}
		}
		cout<<endl;
	}
	return 0;
}
posted @ 2022-07-10 14:58  fengxiaoyi  阅读(13)  评论(0)    收藏  举报  来源