欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ4972 八月月赛Problem B


题目概括

  一个矩阵,一坨询问,问矩阵中一个特定方向的等腰直角三角形范围的sum。


题解

  一开始毫无头绪。

  看完9题,一题也不会。

  发现这题A的人多,于是我花了15分钟仔细思考。

  发现可以了。

  对于一个三角形区域,我们可以看下图:

  

  我们把求右下黑色三角形区域转化成一个矩形和3个左上的三角形,然后就OK了。

  矩形只要前缀和就可以了,O(nm)

  求贴在上面和左边的,各自只要O(nm)

  询问O(1)


代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef unsigned int uint;
const int N=3000+5;
const uint Inv=534566745;
uint A,B,C,x,y,k,t,a[N][N],sum[N][N],L[N][N*2],U[N][N];
int n,m,q;
uint rng61(){
A^=A<<16,A^=A>>5,A^=A<<1,t=A,A=B,B=C,C^=t^A;
return C;
}
uint Pow(uint x,int y){
if (y==0)
return 1;
uint xx=Pow(x,y/2);
xx*=xx;
if (y&1)
xx*=x;
return xx;
}
uint val(int xa,int ya,int xb,int yb){
xb=min(xb,n),yb=min(yb,m);
return sum[xb][yb]-sum[xb][ya-1]-sum[xa-1][yb]+sum[xa-1][ya-1];
}
int main(){
scanf("%d%d%d%u%u%u",&n,&m,&q,&A,&B,&C);
memset(sum,0,sizeof sum);
memset(L,0,sizeof L);
memset(U,0,sizeof U);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++){
a[i][j]=rng61();
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
for (int i=n;i>=1;i--)
for (int j=1;j<=m*2;j++)
L[i][j]=L[i+1][j-1]+val(i,1,i,j);
for (int i=m;i>=1;i--)
for (int j=1;j<=n;j++)
U[i][j]=U[i+1][j-1]+val(1,i,j,i);
uint timesx=Pow(233,q),Ans=0;
for (int i=1;i<=q;i++){
timesx*=Inv;
x=rng61()%n+1,y=rng61()%m+1,k=rng61()%min(x,y)+1;
int xx=x,yy=y,kk=k;
uint ans=sum[x][y]-L[1][x+y-k-1]+L[x+1][max(0,yy-kk-1)]+U[y+1][max(0,xx-kk-1)];
Ans+=timesx*ans;
}
printf("%u",Ans);
return 0;
}

  

BZOJ4972 八月月赛 Problem B 小Q的方格纸 二维前缀和的更多相关文章

  1. HDU - 6336 Problem E. Matrix from Arrays (规律+二维前缀和)

    题意: for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i - j] = A[cursor]; cursor = (cu ...

  2. 【bzoj4972】小Q的方格纸 前缀和

    题目让O(1)预处理出来 类三角形边界及内部的和 根据这个图 就是一个大矩形-左边的绿色的矩形 - 蓝色的大三角形 + 右上角突出的蓝色的小三角形 #include<bits/stdc++.h& ...

  3. BZOJ4972 小Q的方格纸

    每个格子记录其左下的45°直角梯形区域的和及左下矩形区域的和即可. #include<iostream> #include<cstdio> #include<cmath& ...

  4. BZOJ4974 八月月赛 Problem D 字符串大师 KMP

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4974 - 八月月赛 Problem D 题意概括 一个串T是S的循环节,当且仅当存在正整数k,使得 ...

  5. BZOJ4977 八月月赛 Problem G 跳伞求生 set 贪心

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4977 - 八月月赛 Problem G 题意 小明组建了一支由n名玩家组成的战队,编号依次为1到n ...

  6. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  7. python小工具myqr生成动态二维码

    python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...

  8. [动态差分+二维前缀和][小a的轰炸游戏]

    链接:https://ac.nowcoder.com/acm/contest/317/E来源:牛客网 题目描述 小a正在玩一款即时战略游戏,现在他要用航空母舰对敌方阵地进行轰炸 地方阵地可以看做是n× ...

  9. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

随机推荐

  1. 20155332 2006-2007-2 《Java程序设计》第4周学习总结

    20155332 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了解模式和设 ...

  2. pandas数据表

    安装  pip3 install pandas s=pd.Series([1,3,6,90,44,1])   #创建序列[用列表创建].数据源的维度必须是一维 #data  指定数据源 print(s ...

  3. 多文档界面QMdiArea

    当使用多文档界面功能时,我们是将QMdiArea作为主窗口的中央部件,然后在这个中央部件中,我们可以同时打开很多个子窗口QMdiSubWindow 样式: import sys from PyQt5. ...

  4. JavaScript之函数调用与被调用的上下文对象this

    不同的调用机制决定了函数上下文对象的不同: 1.  作为普通函数进行调用时,其上下文是全局对象window; 2.  作为(对象)方法进行调用时,其上下文对象时拥有该方法的对象; 3.  作为构造器( ...

  5. HTML —— 小记

    标签语义化 所谓标签语义化是要使HTML标签具备很好的可读性,可以清晰传达每个标签所要表达的意义,以方便其被友好的处理和解析(主要针对网络爬虫) 好处: 1.对搜索引擎友好,增加排名权重 2.对用户友 ...

  6. Linux常用命令(一)查看日志

    当日志文件存储很大时,需要Linux命令查看: Log 在目录 /var/log/   下 常用命令: tail head grep sed cat tac https://blog.csdn.net ...

  7. Maven入门-运行struts项目进行测试(三)

    maven运行struts项目进行测试: 在入门二中已经导入struts的jar包. 此时的pom.xml文件 <project xmlns="http://maven.apache. ...

  8. VS2013+Win10+opencv3.0配置(包括opencv2.4.10版本)

    在win下配置opencv3.0.0还是比较简单的,这里简单说一下配置过程:参考链接:http://blog.csdn.net/u010009145/article/details/50756751 ...

  9. Linux Makefile 编译速度的优化【转】

    转自:https://blog.csdn.net/QQ1452008/article/details/51851801 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  10. c# 取本地ip地址

    public static System.Net.IPAddress[] GetIpAddress() { string hostName = System.Net.Dns.GetHostName() ...