T1 矩阵
题目
【题目描述】
从前有个 n×m 的矩阵,初始时每个位置均为 0。你需要依次执行 q 个操作,每个操作会指定一行或一列,然后将该行或该列的所有元素全部赋为一个相同的值。 输出操作完成后的矩阵。
【输入格式】
第一行包含三个整数 n,m,q,分别表示矩阵的大小和操作次数。
接下来 q 行,每行三个正整数 t,x,y,若 t = 1,则表示将第 x 行的所有元素赋为 y; 若 t = 2,则表示将第 x 列的所有元素赋为 y。
【输出格式】
输出 n 行,每行 m 个由空格隔开的整数,表示操作完成后的矩阵。
【输入样例】
3 3 3
1 1 3
2 2 1
1 2 2
【输出样例】
3 1 3
2 2 2
0 1 0
【数据规模】
对于 20% 的数据,n×m≤25;
对于 30% 的数据,q≤2000;
对于 100% 的数据,n,m≤1000,n×m≤10^5,q≤10^6。 数据保证任一时刻矩阵中所有元素小于 2^31。
解析
第一题依旧是送分模拟题,根据题目的意思直接模拟即可。
最好反着做,这样时间复杂度比较低。
Code
#include <algorithm> #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cmath> using namespace std; int read() { int num=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') w=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { num=(num<<1)+(num<<3)+ch-'0'; ch=getchar(); } return num*w; } struct rec{ int p,x,y; }s[1000010]; int n,m,q,map[1010][1010]; int main() { //freopen("matrix.in","r",stdin); //freopen("matrix.out","w",stdout); int t; n=read(),m=read(),q=read(); for(int i=1;i<=q;i++) s[i].p=read(),s[i].x=read(),s[i].y=read(); for(int i=q;i>=1;i--) { if(s[i].p==1) { for(int j=1;j<=m;j++) if(!map[s[i].x][j]) map[s[i].x][j]=s[i].y; } else { for(int j=1;j<=n;j++) if(!map[j][s[i].x]) map[j][s[i].x]=s[i].y; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) printf("%d ",map[i][j]); printf("\n"); } return 0; //fclose(stdin); //fclose(stdout); }