牛客新年AK场之模拟二维数组

链接:https://ac.nowcoder.com/acm/contest/3800/D
来源:牛客网

题目描述

Rinne 喜欢使用一种奇怪的方法背单词,现在这些单词被放在了一个 n×mn imes mn×m 的格子里。由于背单词是一个令人烦躁的事情,所以她决定每天只背同一行或者同一列的单词。她一共会背 T 次单词,为了方便巩固,她现在想知道:对于每个单词,最后一次背是什么时候呢?
她这么可爱当然会算啦!但是她想考考你。

输入描述:

第一行三个整数 n,m,T。
接下来 T 行,第 i+1 行描述第 i 天干了什么,每行的格式如下:
`1 x`:说明她在这一天背了第 x 行的单词;
`2 y`说明她在这一天背了第 y 列的单词。
输入的所有量的具体意义请参考「题目描述」。

输出描述:

输出一个 n×m 的矩阵 a,ai,ai,j 表示第 i 行第 j 列这个单词最后一次被背诵是在第几天。(注意是最后一次背诵在第几天)
示例1

输入

复制
3 3 3
1 2
2 3
1 3

输出

复制
0 0 2
1 1 2
3 3 3

备注:n×m1e5,T1e5

解题思路:用两个一维数组来模拟二维数组

AC代码

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}
typedef unsigned long long ll;
const int maxn = 1e6+10;
int a[maxn],b[maxn];
int main()
{
    int n,m,t;
    cin>>n>>m>>t;
    int z,x;
    for(int i=1;i<=t;i++){
        cin>>z>>x;
        if(z==1){
            a[x-1]=i;
        }
        if(z==2){
            b[x-1]=i;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d ",max(a[i],b[j]));
        }
        printf("
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/lipu123/p/12142728.html