Description

Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成(k-(该地区到爆炸中心曼哈顿距离))*(该地区的价值)的损失.现在,地灵殿方面想统计一下每颗核弹造成的损失,请你来帮忙计算.

Data Constraint

对于30%的数据,满足n<=300,m<=300,Q<=300
对于60%的数据,满足n<=300,m<=300
对于100%的数据,满足1<=n<=2000,1<=m<=2000,1<=Q<=200000,1<=k<=min(x,y,n-x+1,m-y+1),1<=每个区域的价值<=1000000

Solution


这样的询问比较常见,但我只想到把正方形倒过来。还是不会做。对于这样的一个询问,我们可以维护一个点f[i][j]表示两条过(i,j)的斜率为1和-1的直线所包括的左边的区域之和。像这样f[3][5]
那么我们现在对于
系数至少为1的数之和,我们可以用f[3][5]-f[1][2]-f[5][2]+f[3][0]。
系数至少为2的数之和,我们可以用f[3][4]-f[2][2]-f[4][2]+f[3][1]-以(1,2)为端点的斜率为-1的线段-以(5,2)为端点的斜率为1的线段。
系数至少为3的数之和,我们可以用f[3][3]-f[3][2]-f[3][2]+f[3][2]-以(2,2)为端点的斜率为-1的线段-以(4,2)为端点的斜率为1的线段。
我们发现加的f值的横坐标都为x,减的f的纵坐标都为y-1,为端点的线段的端点的纵坐标也同为y-1,所以维护一下前缀和即可。

Code

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const ll maxn=2e3+5;
ll a[maxn][maxn],f[maxn][maxn],g[maxn][maxn],l[maxn][maxn],r[maxn][maxn];
ll n,m,i,t,j,k,x,y,z,ans,xx,yy;
ll get(){
    char ch=getchar();ll x=0;
    while (ch<48 || ch>57) ch=getchar();
    while (ch>=48 && ch<=57) x=x*10+ch-48,ch=getchar();
    return x;
}
int main(){
    freopen("flare.in","r",stdin);freopen("flare.out","w",stdout);
    scanf("%lld%lld",&n,&m);
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            a[i][j]=get();
    for (j=1;j<=m;j++){        g[0][j]=f[0][j]=f[1][j-1];
        for (i=1;i<=n+1;i++)l[i][j]=l[i-1][j-1]+a[i][j];
        for (i=n;i>=0;i--)r[i][j]=r[i+1][j-1]+a[i][j];
        for (i=1;i<=n;i++)f[i][j]=f[i][j-1]+l[i][j]+r[i][j]-a[i][j],g[i][j]=g[i-1][j]+f[i][j];
        f[n+1][j]=f[n][j-1];g[n+1][j]=g[n][j]+f[n+1][j];
    }
    for (i=1;i<=n+1;i++)
        for (j=1;j<=m;j++)
            f[i][j]+=f[i][j-1],l[i][j]+=l[i-1][j];
    for (i=n;i>=0;i--)
        for (j=1;j<=m;j++)r[i][j]+=r[i+1][j];
    scanf("%lld",&m);
    while (m--){        scanf("%lld%lld%lld",&x,&y,&z);
        if (z>1)ans=f[x][y+z-1]-f[x][y-1]+f[x][y-2]-f[x][y-z-1];
        else ans=f[x][y]-f[x][y-1];
        ans=ans-(g[x+z-1][y-1]-g[x-z][y-1])-(l[x-1][y-1]-l[x-z-1][y-1])-(r[x+1][y-1]-r[x+z+1][y-1]);
        printf("%lld\n",ans);
    }
}

【JZOJ5410】【NOIP2017提高A组集训10.22】小型耀斑相关推荐

  1. jzoj5410【NOIP2017提高A组集训10.22】小型耀斑

    题目 Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会 ...

  2. [JZOJ5410]【NOIP2017提高A组集训10.22】小型耀斑 (口胡)

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  3. JZOJ 5415. 【NOIP2017提高A组集训10.22】公交运输

    Description 城市中有一条长度为n的道路,每隔1的长度有一个公交车站,编号从0到n,学校在0号车站的位置.其中每个公交车站(除了n号车站)有两个属性ci和vi,代表从这个公交车站出发的公交车 ...

  4. JZOJ 5414. 【NOIP2017提高A组集训10.22】幸运值

    Description 校庆志愿者小Z在休息时间和同学们玩卡牌游戏.一共有n张卡牌,每张卡牌上有一个数Ai,每次可以从中选出k张卡牌.一种选取方案的幸运值为这k张卡牌上数的异或和.小Z想知道所有选取方 ...

  5. 【JZOJ 5410】【NOIP2017提高A组集训10.22】小型耀斑

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  6. JZOJ5411. 【NOIP2017提高A组集训10.22】友谊 DP

    DescriptionFlowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1& ...

  7. 【JZOJ5411】【NOIP2017提高A组集训10.22】友谊

    Description Flowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1 ...

  8. JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  9. 【NOIP2017提高A组集训10.22】友谊

    Description Flowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1 ...

最新文章

  1. 没有什么效果的html标签,你知道却不常用的HTML标签(一)
  2. 算法---------数组-----------寻找峰值
  3. 记事本写python怎么运行-python入门之一个简单记事本
  4. j2ee爬坑行之一:web容器
  5. 2016年EDM营销新年策略分享
  6. 杨清彦:《像三国》游戏3D动效制作经验分享
  7. python多进程间通信_Python 多进程编程之 进程间的通信(Queue)
  8. linux设置最大打开文件数
  9. go-cqhttp + noneBot群聊机器人 配置开发
  10. android api 完整翻译之Contacts Provider (学习安卓必知的api,中英文对照)
  11. win10系统小键盘数字键不能用怎么办
  12. 招商银行笔试题之糖果分配
  13. 一只喵的西行记-5 妈妈咪鸭
  14. 马尔可夫决策过程和贝尔曼方程
  15. 宅基地一码溯源、一码统管
  16. 电脑怎么保存网页到桌面上使用
  17. 【opencv3】滑动条调节RGB颜色阈值并输出滑动条的值
  18. 【论文翻译】YOLOv4: Optimal Speed and Accuracy of Object Detection
  19. PHP如何去制作一个许愿墙,php许愿墙开发视频教程,php许愿墙源码
  20. JQuery Mobile(书籍分类检索)

热门文章

  1. 第十五届D2前端技术论坛 笔记
  2. html设置及格不及格良好优秀,Excel用IF函数算优秀良好及格不及格各等级成绩
  3. jitsi-meet 主持人退出会议后结束会议室(网页访问)
  4. 我怀疑你在偷窥我的生活,考研狗的真实现状
  5. 低代码构建物联网平台,让物联网项目更简单
  6. Python 分析00-90后的微信昵称,发现如下规律!
  7. EC800N 接入Onenet Studio教程(2023年)
  8. python从高德api获取公交线路规划信息
  9. 2019中国爱分析数据智能高峰论坛(北京)
  10. 3D动作绑定_游戏建模大佬教你九招轻轻松松学会三维动画制作绑定技术