jzoj5410【NOIP2017提高A组集训10.22】小型耀斑
来源:互联网 发布:陕西广电网络客服招聘 编辑:程序博客网 时间:2024/06/02 06:19
题目
Description
Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成(k-(该地区到爆炸中心曼哈顿距离))*(该地区的价值)的损失.现在,地灵殿方面想统计一下每颗核弹造成的损失,请你来帮忙计算.
Input
从flare.in 中读入数据第一行为两个整数n,m接下来n 行每行m 个整数,代表第i 行第j 个区域的价值接下来一行为一个整数Q,代表核弹的数目.接下来Q 行每行三个整数x,y,k,代表第i 颗核弹的爆炸中心以及它的大小.
Output
输出到文件flare.out 中Q 行,每行1 个整数,代表第i 颗核弹的损失.
Sample Input
5 51 2 3 4 59 8 7 6 52 3 3 3 36 6 6 6 61 4 2 8 55
1 1 15 5 13 3 32 2 24 2 2
Sample Output
1
5
833731
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
题解
十分猎奇的前缀和乱搞
设sum1[i][j]为sum[i][j]的前缀和,sl,sr,ss为三个不同方向的sum1的前缀和(看程序吧好难解释),然后乱搞就可以了
贴代码
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define ll long longusing namespace std;const int maxn=2005;ll sum[maxn][maxn],sum1[maxn][maxn],sl[maxn][maxn],sr[maxn][maxn],a[maxn][maxn],ss[maxn][maxn];ll i,j,k,l,n,m,x,y,ans,q,z;char ch;int read(){ int x=0; ch=getchar(); while (ch<'0' || ch>'9') ch=getchar(); while (ch>='0' && ch<='9'){ x=x*10+ch-48; ch=getchar(); } return x;}ll sumr(int x1,int y1,int x2,int y2){ if (y1<=0) return 0; if (x1<=x2) return 0; while (y2<0){ x2++; y2++; } return sr[x1][y1]-sr[x2][y2];}ll suml(int x1,int y1,int x2,int y2){ while (y1<=0){ x1--; y1++; } if (x1<x2) return 0; return sl[x1][y1]-sl[x2][y2];}void geans(int x,int y,int k){ k--; ans=ans+sumr(x,y+k,x-k-1,y-1); ans=ans+suml(x,y-k-2,x-k-1,y-1); ans=ans+suml(x+k,y,x,y+k); ans=ans+sumr(x+k,y-2,x,y-k-2); ans=ans-2*(ss[x+k][y-1]-ss[x-k-1][y-1]);}int main(){ freopen("t1.in","r",stdin); freopen("t1.out","w",stdout); n=read(); m=read(); fo(i,1,n){ fo(j,1,m){ a[i][j]=read(); sum[i][j]=sum[i][j-1]+a[i][j]; sum1[i][j]=sum1[i][j-1]+sum[i][j]; } } fo(i,1,n){ fo(j,1,m){ sl[i][j]=sl[i-1][j+1]+sum1[i][j]; if (j) sr[i][j]=sr[i-1][j-1]+sum1[i][j]; ss[i][j]=ss[i-1][j]+sum1[i][j]; } } q=read(); fo(i,1,q){ x=read(); y=read(); z=read(); ans=0; geans(x,y,z); printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- 【JZOJ5410】【NOIP2017提高A组集训10.22】小型耀斑
- jzoj5410【NOIP2017提高A组集训10.22】小型耀斑
- [JZOJ5410]【NOIP2017提高A组集训10.22】小型耀斑 (口胡)
- JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑
- 【JZOJ 5410】【NOIP2017提高A组集训10.22】小型耀斑
- Jzoj5410 小型耀斑
- 【NOIP2017提高A组集训10.22】友谊
- 【NOIP2017提高A组集训10.22】友谊
- 【JZOJ 5411】【NOIP2017提高A组集训10.22】友谊
- JZOJ 5414. 【NOIP2017提高A组集训10.22】幸运值
- 【NOIP2017提高A组集训10.22】幸运值
- JZOJ5416. 【NOIP2017提高A组集训10.22】密码 DP
- JZOJ5415. 【NOIP2017提高A组集训10.22】公交运输 DP
- JZOJ5414. 【NOIP2017提高A组集训10.22】幸运值
- [JZOJ5411]【NOIP2017提高A组集训10.22】友谊
- 【JZOJ 5414】【NOIP2017提高A组集训10.22】幸运值
- 【JZOJ 5415】【NOIP2017提高A组集训10.22】公交运输
- 【JZOJ 5416】【NOIP2017提高A组集训10.22】密码
- 2017年网络小说人气排行榜
- 剑指offer 二叉树的镜像
- layer.iframe父子页面之间的数据交互(1)
- 一般java.lang.NoClassDefFoundError异常错误的问题和解决
- PyQt笔记002——页面代码分离
- jzoj5410【NOIP2017提高A组集训10.22】小型耀斑
- Redis服务停止报错解决方案[NOAUTH Authentication required]
- 关于树的重心的问题
- windows下创建lua
- P2885 [USACO07NOV]电话线Telephone Wire
- js实现引用对象的深度复制
- 解析JSON格式数据常见方法
- pandas
- 14.5.2.3 一致性非阻塞读