zoukankan      html  css  js  c++  java
  • 18牛客第二场 J farm

    链接:https://www.nowcoder.com/acm/contest/140/J
    来源:牛客网

    White Rabbit has a rectangular farmland of n*m. In each of the grid there is a kind of plant. The plant in the j-th column of the i-th row belongs the a[i][j]-th type. White Cloud wants to help White Rabbit fertilize plants, but the i-th plant can only adapt to the i-th fertilizer. If the j-th fertilizer is applied to the i-th plant (i!=j), the plant will immediately die. Now White Cloud plans to apply fertilizers T times. In the i-th plan, White Cloud will use k[i]-th fertilizer to fertilize all the plants in a rectangle [x1[i]...x2[i]][y1[i]...y2[i]]. White rabbits wants to know how many plants would eventually die if they were to be fertilized according to the expected schedule of White Cloud.
    输入描述:
    The first line of input contains 3 integers n,m,T(n*m<=1000000,T<=1000000)For the next n lines, each line contains m integers in range[1,n*m] denoting the type of plant in each grid.For the next T lines, the i-th line contains 5 integers x1,y1,x2,y2,k(1<=x1<=x2<=n,1<=y1<=y2<=m,1<=k<=n*m)
    输出描述:
    Print an integer, denoting the number of plants which would die.

    示例1

    输入

    2 2 2
    1 2
    2 3
    1 1 2 2 2
    2 1 2 1 1

    输出

    3

    题意:给出一个n*m的区域,t次操作 每个点都是一种植物 t次操作区域覆盖肥料,如果区域里面的植物不等于覆盖的飞亮那么就植物死亡,求有多少植物死亡。

    思路:我们将每种植物的坐标存下来,然后我也将每种肥料的覆盖区域坐标存下,在我们算每种植物贡献的时候,我们先删除同种肥料对于贡献的影响,然后再查询完再加上

    最后枚举所有植物即可。

    #include<bits/stdc++.h>
    using namespace std;
    #define pb push_back
    #define pll pair<int,int>
    #define mp make_pair
    #define ll long long
    const int maxn = 1000000+5;
    struct node
    {
        int x1,x2,y1,y2;
        node(int x1,int x2,int y1,int y2):x1(x1),x2(x2),y1(y1),y2(y2) {};
    };
    vector< vector< pll > > p;
    vector< vector< int > > a;
    vector< vector<node> > pos;
    int n,m;
    int lowbit(int x)
    {
        return x&(-x);
    }
    void add(int x,int y,int d)
    {
    
        for(int i=x; i<=n; i+=lowbit(i))
            for(int j=y; j<=m; j+=lowbit(j))
                a[i][j]+=d;
    }
    int query(int x,int y)
    {
        int ans=0;
        for(int i=x; i>0; i-=lowbit(i))
            for(int j=y; j>0; j-=lowbit(j))
                ans+=a[i][j];
        return ans;
    
    }
    void updata(int x1,int y1,int x2,int y2,int d)
    {
        add(x1,y1,d);
        add(x2+1,y2+1,d);
        add(x1,y2+1,-d);
        add(x2+1,y1,-d);
    }
    int main()
    {
        int t,k,x1,x2,y1,y2;
        scanf("%d %d %d",&n,&m,&t);
        a.resize(n+1);
        for(int i=1; i<=n; i++)
            a[i].resize(m+1);
        p.resize(n*m+1);
        pos.resize(n*m+1);
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
            {
                scanf("%d",&k);
                p[k].pb(mp(i,j));
            }
        for(int i=1; i<=t; i++)
        {
            scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&k);
            pos[k].pb(node(x1,x2,y1,y2));
            updata(x1,y1,x2,y2,1);
        }
        ll ans=0;
        for(int i=1; i<=n*m; i++)
        {
            int len=pos[i].size();
            for(int j=0; j<len; j++)
            {
                updata(pos[i][j].x1,pos[i][j].y1,pos[i][j].x2,pos[i][j].y2,-1);
            }
            int len1=p[i].size();
            for(int j=0; j<len1; j++)
            {
                if(query(p[i][j].first,p[i][j].second))
                    ans++;
            }
            for(int j=0; j<len; j++)
            {
                updata(pos[i][j].x1,pos[i][j].y1,pos[i][j].x2,pos[i][j].y2,1);
            }
    
        }
       printf("%lld
    ",ans);
    }
    View Code

    PS:摸鱼怪的博客分享,欢迎感谢各路大牛的指点~

  • 相关阅读:
    设计模式单例模式的实现方式
    Springboot,SSM框架比较,区别
    多线程系列之自己实现一个 lock 锁
    springBoot 自动配置原理自己新建一个 starter
    Hashmap 实现方式 jdk1.7 和 1.8区别
    给WPF中的DataGrid控件添加右键菜单(ContextMenu),以便用户可以显示或者隐藏DataGrid中的列,并且下次运行时依然保持上次关闭时的列的布局
    WPF XAML页面 无智能感知
    【读书笔记】排列研究排列中的代数组合学
    使用Mathematica做序列的DTFT的几个例子
    BGF bivariate generating function 双变量生成函数
  • 原文地址:https://www.cnblogs.com/MengX/p/9350639.html
Copyright © 2011-2022 走看看