CF631B Print Check题解
解法一(模拟)
思路
输入 ,判断(其中 表示第 行第 列的兵种):
- 若 :
for(int j=1;j<=m;j++){
mp[y][j]=z;
}
- 若 :
for(int j=1;j<=n;j++){
mp[j][y]=z;
}
最后依次输出 即可。
代码
#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 了,要怎么优化呢?
解法二
可以对解法一进行一个优化。
思路
定义一个结构体 ,这个结构体包含两个变量:。其中 表示兵种, 表示时间。
用 来定义两个数组:。 表示列, 表示行。
最后在输出时,做个判断( 表示第 行, 表示第 列):
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;
}

浙公网安备 33010602011771号