• 牛客网多校训练2 J farm(rand+二维树状数组)


    题意:就是花园里有一些花,这些花都有一个编号,他的编号就是他说需要的肥料,一朵花施其他的肥料就会死,有很多操作,每次都是将一个正方形撒化肥,最后问你死了几朵花

    思路:这个题在听直播讲题的时候说时候三种解法,一种是用树状数组,一种是扫描线,一种就是rand,rand 的思路其实就是给每种化肥随机一个权值,如果其他的肥料撒到了,他们同余之后是有余数的,所以就代表死了。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <string>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <set>
    #include <vector>
    #include <stack>
    using namespace std;
    typedef long long LL;
    const int maxn=1e6+7;
    LL lowbit(int x){return x&(-x);}
    vector<LL>ans[maxn];
    vector<LL>g[maxn];
    LL Hash[maxn];
    int n,m,t;
    const int MOD=1e9+7;
    void init()
    {
        for(int i=1;i<=1e6;i++){
            Hash[i]=rand()*MOD/7;
        }
    }
     
    void update(int x,int y,int val)
    {
        for(int i=x;i<=n;i+=lowbit(i)){
            for(int j=y;j<=m;j+=lowbit(j)){
                ans[i][j]+=val;
            }
        }
    }
    bool check(int x,int y)
    {
        LL res=0;
        for(int i=x;i>=1;i-=lowbit(i)){
            for(int j=y;j>=1;j-=lowbit(j)){
                res+=ans[i][j];
            }
        }
        if(res%g[x][y])return true;
        return false;
    }
    int main()
    {
        init();
        scanf("%d%d%d",&n,&m,&t);
        for(int i=1;i<=n;i++){
            g[i].push_back(0);
            ans[i].push_back(0);
            for(int j=1;j<=m;j++){
                int x;
                scanf("%d",&x);
                g[i].push_back(Hash[x]);
                ans[i].push_back(0);
            }
        }
        for(int i=1;i<=t;i++){
            int x1,x2,y1,y2,k;
            scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&k);
            update(x1,y1,Hash[k]);
            update(x2+1,y2+1,Hash[k]);
            update(x2+1,y1,-Hash[k]);
            update(x1,y2+1,-Hash[k]);
        }
        int sum=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(check(i,j))sum++;
            }
        }
        printf("%d
    ",sum);
        return 0;
    }
  • 相关阅读:
    一个很诡异的javascript问题
    记录我开发鞋服行业供应链软件的历程<设计业务层>
    为什么要自已写报表中心
    关于系统的性能
    “时间”都去哪儿了?性能调优分析方法与案例详解
    工程师推荐软件
    终于有人把云计算、大数据和人工智能讲明白了!
    C# Dictionary 泛型字典集合(转)
    DEV中的TreeList控件应用的一个小效果实现
    推荐VS2008插件CodeRush Xpress for C#
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/9362385.html
Copyright © 2020-2023  润新知