1 条题解

  • 0
    @ 2025-8-24 22:45:29

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar liucang
    这个家伙不懒,什么也没有留下

    搬运于2025-08-24 22:45:29,当前版本为作者最后更新于2023-03-04 14:11:32,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    容易发现,位于 (xi,yi)(x_i,y_i) 的格子的颜色只取决于 xix_i 行与 yiy_i 列的颜色。

    这时候可以想到开两个数组,分别存储列与行的绘画信息,然后发现前后的互相覆盖可以通过存储绘画顺序来得出。

    于是开一个结构体,存储绘画信息,成员有:

    1. color

    2. priority

    然后就可以在输出的时候反推回来,时间复杂度 O(nm)O(nm),可以通过本题。具体实现:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    struct paint{ //绘画信息,col=列,row=行
        ll color, priority;
    }col[100010], row[100010];
    
    ll n,m,q;
    
    int main(){
        int T;
        scanf("%d", &T);
        while(T--){
            memset(col,0,sizeof(col)); // 多测不清空,亲人两行泪
            memset(row,0,sizeof(row));
            scanf("%lld%lld%lld",&n,&m,&q);
            for(int i=1;i<=q;i++){
                ll opt,x,c;
                scanf("%lld%lld%lld",&opt,&x,&c);
                if(opt==0){
                    row[x].color=c;
                    row[x].priority=i;
                }
                else {
                    col[x].color=c;
                    col[x].priority=i;
                }
            }
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(row[i].priority>col[j].priority){
                        printf("%lld ", row[i].color);
                    }
                    else {
                        printf("%lld ", col[j].color);
                    }
                }
                printf("\n");
            }
        }
        return 0;
    }
    
    // @nullptr_qwq & @wanhao326 祝大家AK春测!
    
    • 1

    信息

    ID
    8448
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者