【发布时间】:2020-06-16 10:07:32
【问题描述】:
问题:我们给出了一个 nxm 矩阵,初始初始化为 0。我们必须执行 k 个查询: 每个查询都支持两种操作之一。
用颜色 ai 绘制 ri 行中的所有元素。
用颜色 ai 绘制 ci 列中的所有元素。
同一元素可以多次绘制。但是该元素的颜色与该元素的最后绘制颜色相同。您必须在绘制后打印最终的矩阵。
输入:第一行包含三个空格分隔的整数 N,M,K
接下来的 K 行只包含一种要执行的操作类型
1) 1 ri ai 表示行 ri 涂有颜色 ai
2) 2 ci ai 表示列 ci 用颜色 ai 绘制
输出:绘制后打印最终大小为 nxm 的矩阵。
样本输入:
3 3 3
1 1 3
2 2 1
1 2 2
输出:
3 1 3
2 2 2
0 1 0
我已经编写了以下代码来解决它,但它显示了某些测试用例的 TLE。你能给我一些想法如何以有效的方式解决它吗?
我的代码
#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int mat[5000][5000];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,m,k,q,r,c,val,i,j,re;
cin>>n>>m>>re;
while(re--)
{
cin>>q;
if(q==1)
{
cin>>r;
cin>>val;
i=r-1;
for(j=0,k=m-1;j<=k;j++,k--)
{
mat[i][j]=val;
mat[i][k]=val;
}
}
else if(q==2)
{
cin>>c>>val;
j=c-1;
for(i=0,k=n-1;i<=k;i++,k--)
{
mat[i][j]=val;
mat[k][j]=val;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
}
【问题讨论】:
-
为什么用两个绘制操作来划分循环?这是展开的廉价尝试吗?
-
如果您是 C++ 新手,我建议您阅读:Why using namespace std is considered bad practise,这很有趣!
标签: c++