zoukankan      html  css  js  c++  java
  • hiho 1613

    题目链接

    小Ho有一张白纸,上面有NxN个格子。小Ho可以选择一个格子(X, Y),在上面滴一滴墨水。如果这滴墨水的颜色深度是G,那么这个格子也会被染成深度为G的格子。同时周围的格子也会被这滴墨水浸染,不过颜色深度会略微降低。具体来说,如果一个格子距离(X, Y)的曼哈顿距离是D,那么它会被染成深度为max{0, G-D}的格子。  

    例如在(3, 3)滴一滴颜色深度为10的墨水,则(2, 3)(4, 3)(3, 2)(3, 4)四个格子会被染成深度为9,(1, 3)(2, 2)(2, 3)(3, 1)(3, 5)(4, 2)(4, 4)(5, 3)会被染成深度为8……  

    现在小Ho在K个格子中都滴了一滴墨水。于是一个格子可能被多滴墨水浸染,这时它的颜色深度是单滴墨水浸染时最高的颜色深度。  

    给定K滴墨水的位置和颜色深度,你能帮小Ho算出最后整张白纸上所有格子的颜色深度吗?

    输入

    第一行包含两个整数N和K。  

    以下K行每行包含三个整数Xi, Yi和Gi。  

    对于30%的数据, 1 ≤ N, K ≤ 100  

    对于100%的数据,1 ≤ N ≤ 1000 1 ≤ K ≤ 10000  0 ≤ Xi, Yi < N  0 ≤ Gi < 2048

    输出

    输出一个NxN的矩阵,代表每个格子最终的颜色深度

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    using namespace std;
    struct Node{
        int x,y;
        int depth;
        Node(){};
        Node(int x,int y,int depth):x(x),y(y),depth(depth){};
        bool operator<(const Node& another) const{
            return this->depth<another.depth;
        }
    };
    const int N = 1024;
    const int skip[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    int A[N][N];
    priority_queue<Node> q;
    int main(){
        int n,t; cin>>n>>t;
        while(t--){
            int x,y,d;
            scanf("%d%d%d",&x,&y,&d);
            q.push(Node(x,y,d));
        }
        memset(A,0,sizeof(A));
        while(!q.empty()){
            Node cur = q.top(); q.pop();
            if(cur.depth<=A[cur.x][cur.y]) continue;
            A[cur.x][cur.y]=cur.depth;
            for(int i=0;i<4;i++){
                int tx = cur.x + skip[i][0];
                int ty = cur.y + skip[i][1];
                if(tx<0||ty<0||tx>=n||ty>=n) continue;
                if(cur.depth-1>A[tx][ty]){
                    q.push(Node(tx,ty,cur.depth-1));
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++) printf("%d ",A[i][j]); puts("");
        }
        return 0;
    }
    
  • 相关阅读:
    linux下安装apache2.4
    tomcat中设置多项目共享jar;类包
    解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
    oracle根据pid查询出正在执行的执行语句
    通过配置tomcat虚拟路径配置站点的静态资源
    百度编辑器umeditor使用总结
    通过ApplicationContextAwareSpring实现手工加载配置的javabean
    jquery登录验证插件
    linux服务器下tomcat部署项目内存溢出
    读取properties文件
  • 原文地址:https://www.cnblogs.com/redips-l/p/7763919.html
Copyright © 2011-2022 走看看