欢迎访问~原文出处——博客园-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. 关于Mac OS虚拟机下共享文件夹的方法

    1.确保左上角苹果标志的旁边是“Finder”: 2.点击"Finder": 3.选择“偏好设置设置”: 4.然后在“通用”标签下勾选“已连接服务器”: OK,搞定!   完成以上 ...

  2. mssql拿webshell的方法

    首先检测下MSSQL数据库的用户权限,一般有两种,一种是SA权限,这种权限很大,还有一种是DB_OWNER权限,这个权限赋给用户一些对数据库的修改.删除.新增数据库表,执行部分存储过程的权限.但是涉及 ...

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

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

  4. static, const

    static 静态的,类的静态成员函数,静态成员变量是和类相关的,但不和具体对象相关.即使没有具体对象,也能调用类的静态成员函数和成员变量.一般类的静态函数就是一个全局函数,只是作用域在包含它的文件中 ...

  5. JavaScript之12306自动刷新车票[待完善]

    function refresh(){ var search_btn = document.getElementById("query_ticket"); var result_t ...

  6. Ngnix + Tomcat负载均衡架构

    一.nginx Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.  其特点是占有内 ...

  7. linux关机时候执行命令脚本或程序

    Write a service file and place it in /etc/systemd/system/beforeshuttingdown.service code: [Unit] Des ...

  8. 关于nginx报错/usr/share/nginx/html/jiankongshare" failed (2: No such file or directory)的问题解决

    nginx的location虚拟目录配置: monitor.conf server {       server_name   monitor.chinasoft.com;       server_ ...

  9. fastjson序列化排序问题

    fastjson序列化,默认是用字母排序, 那么怎么来实现按照自己定义的顺序输出,想要的json串呢? 直接上代码: import com.alibaba.fastjson.annotation.JS ...

  10. 虚拟机Ubuntu 18.04安装RabbitMQ 3.7.9

    Windows 10家庭中文版,VirtualBox,Ubuntu 18.04,Rabbitmq 3.7.9,Erlang/OTP 20 [erts-9.2], 在虚拟机上装好了Ubuntu,写了一个 ...