【bzoj4972】小Q的方格纸 前缀和
题目让O(1)预处理出来 类三角形边界及内部的和

根据这个图 就是一个大矩形-左边的绿色的矩形 - 蓝色的大三角形 + 右上角突出的蓝色的小三角形
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,l,r) for(int i=l;i<=r;i++)
const ll mod = 1LL<<32;
const int N = 3000+10;
unsigned int A,B,C;
inline unsigned int rng61(){
A ^= A << 16;
A ^= A >> 5;
A ^= A << 1;
unsigned int t = A;
A = B;
B = C;
C ^= t ^ A;
return C;
} ll a[N][N], rect[N][N], tri[N][N]; int n, m, q ,x, y, k;
void input()
{
scanf("%d%d%d%u%u%u", &n, &m, &q, &A, &B, &C);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
a[i][j] = rng61();
}
ll pow_mod(ll x,ll n1) {
ll res = 1;
while (n1 > 0) {
if(n1 & 1) res = res*x%mod;
x = x*x%mod;
n1/=2;
}
return res;
} int main () {
freopen("out.txt","w",stdout);
input();
//printf("---rect ---\n");
rep(i,1,n) {
rep(j,1,m) {
rect[i][j] = rect[i-1][j] + rect[i][j-1] - rect[i-1][j-1] + a[i][j];
//printf("%10lld ",rect[i][j]);
}
//puts("");
}
//printf("---rect ---\n");
//printf("---tri ---\n");
rep(i,1,n) {
for(int j=m;j>=1;j--) {
tri[i][j] = tri[i-1][j] + tri[i-1][j+1] - tri[i-2][j+1] + a[i][j];
//printf("%10lld ",tri[i][j]);
}
//puts("");
}
//printf("---tri ---\n");
ll res = 0;
for(int i=1;i<=q;i++) {
x = rng61() % n + 1;
y = rng61() % m + 1;
k = rng61() % min(x, y) + 1;
ll ans = rect[x][y] - rect[x][y-k] - tri[x-1][y-k+1] + tri[x-k-1][y+1];
res = res*233%mod + ans %mod;
res %=mod;
}
cout << res <<endl;
return 0;
}
【bzoj4972】小Q的方格纸 前缀和的更多相关文章
- BZOJ4972 小Q的方格纸
每个格子记录其左下的45°直角梯形区域的和及左下矩形区域的和即可. #include<iostream> #include<cstdio> #include<cmath& ...
- BZOJ4972 八月月赛 Problem B 小Q的方格纸 二维前缀和
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4972 八月月赛Problem B 题目概括 一个矩阵,一坨询问,问矩阵中一个特定方向的等腰直角三角 ...
- ZJNU 2345 - 小Y的方格纸
明显,总共有n*m格,已经涂了k格 所以剩下n*m-k格 如果n*m-k<=k,即k已经占用了大于等于一半的格子,显然答案为0 否则 剩下的格子中取k+1,k+2...n*m-k格均可 取组合数 ...
- bzoj 4815: [Cqoi2017]小Q的表格 [数论]
4815: [Cqoi2017]小Q的表格 题意: 单点修改,查询前缀正方形和.修改后要求满足条件f(a,b)=f(b,a), b×f(a,a+b)=(a+b)*f(a,b) 一开始sb了认为一次只会 ...
- [bzoj4815]: [Cqoi2017]小Q的表格
来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. ...
- 【CQOI2017】小Q的表格
[CQOI2017]小Q的表格 稍加推导就会发现\(f(a,b)=a\cdot b\cdot h(gcd(a,b))\). 初始时\(h(n)=1\). 询问前\(k\)行\(k\)列时我们就反演: ...
- 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)
[BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...
- 洛咕 P3700 [CQOI2017]小Q的表格
洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...
- bzoj4815[CQOI2017]小Q的格子
题意 不简述题意了,简述题意之后这道题就做出来了.放个原题面. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向 ...
随机推荐
- 用ajax实现用户名的检测(JavaScript方法)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- [Fine Uploader] 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件的 Javascript 组件 This project attempts to ach ...
- 2-sat(tarjan算法)hdu(1824)
hdu1824 Let's go home Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- linux漏洞扫描工具【lynis】
Lynis是一款Unix系统的安全审计以及加固工具,能够进行深层次的安全扫描,其目的是检测潜在的时间并对未来的系统加固提供建议.这款软件会扫描一般系统信息,脆弱软件包以及潜在的错误配置. 特征: 漏洞 ...
- Visual Studio 2017正式版离线安装方法
Visual Studio 2017 RTM正式版离线安装及介绍. 首先至官网下载:https://www.visualstudio.com/zh-hans/downloads/ VS 2017 正式 ...
- Code Forces 652A Gabriel and Caterpillar
A. Gabriel and Caterpillar time limit per test 1 second memory limit per test 256 megabytes input st ...
- IIS与ASP.NET中的线程池
1. W3 Thread Pool(W3TP) 当处于内核模式的http.sys接收到来自用户的请求之后,会将请求放入队列中.那处于用户模式的w3wp进程如何从内核模式的队列中取出请求呢?I/O完成端 ...
- angular-translate国际化
1.<h1>{{"hello" | translate}}</h1>2.<h1 ng-bind-html="'hello' | transl ...
- UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 0: illegal multibyte sequence
使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character ' ...
- android(十)smali
Dalvik是google专门为Android操作系统设计的一个虚拟机,经过深度的优化.虽然Android上的程序是使用java来开发的,但是Dalvik和标准的java虚拟机JVM还是两回事. Da ...