前缀和--BZOJ-4972 小Q的方格纸
来源:互联网 发布:勿谓言之不预也 知乎 编辑:程序博客网 时间:2024/05/20 14:15
将三角形化为梯形和矩形的和,差。
先用前缀和计算梯形、矩形的和即可。
ps:计算时注意f[a,b] = f[b] - f[a - 1]
#include <iostream>
#include <cstdio>
using namespacestd;
const int maxn =3000 + 5;
int mp[maxn][maxn];
int tra[maxn][maxn],rect[maxn][maxn];
int n,m,q;
unsigned A,B,C;
typedef longlong ll;
const ll mod = (1ll <<32);
void cal()
{
for(int i =1;i <= n;i ++){
for (int j =m; j >= 1 ; j --) {
tra[i][j] =mp[i][j] + tra[i -1][j + 1] +tra[i][j + 1] -tra[i - 1][j +2];//梯形
rect[i][j] =mp[i][j] + rect[i -1][j] + rect[i][j +1] - rect[i -1][j + 1];//矩形
}
}
}
int solve(int x,int y,int k)
{
returntra[x][y - k + 1] -tra[x - k][y + 1] - (rect[x][y +1] - rect[x - k][y +1]);
}
inline unsignedint rng61(){
A ^= A << 16;
A ^= A >> 5;
A ^= A << 1;
unsignedint t = A;
A = B;
B = C;
C ^= t ^A;
returnC;
}
int main()
{
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++)
mp[i][j] =rng61();
cal();
int x,y,k;
ll sum =0;
for(int i =1; i <= q; i++){
x = rng61() %n + 1;
y = rng61() %m + 1;
k = rng61() %min(x, y) + 1;
sum = (sum * 233 +solve(x, y, k)) % mod;
}
printf("%lld\n",(sum +mod) % mod);
return0;
}
- 前缀和--BZOJ-4972 小Q的方格纸
- bzoj 4972 [Lydsy八月月赛]小Q的方格纸(前缀和)
- [前缀和 乱搞]BZOJ4972 .小Q的方格纸
- bzoj 4813 [Cqoi2017]小Q的棋盘
- BZOJ 4813 [Cqoi2017]小Q的棋盘
- bzoj 4815: [Cqoi2017]小Q的表格
- bzoj 4814 [Cqoi2017]小Q的草稿
- BZOJ 4813 [Cqoi2017]小Q的棋盘
- bzoj 1303 |前缀和
- BZOJ 4017 小Q的无敌异或
- BZOJ 4018 小Q的幻想之乡
- bzoj 4017 小Q的无敌异或
- [BZOJ 4815] [Cqoi2017]小Q的表格 解题报告
- [BZOJ 4813][Cqoi2017]小Q的棋盘:TreeDP
- [几何] BZOJ 4814 [Cqoi2017]小Q的草稿
- BZOJ 4813: [Cqoi2017]小Q的棋盘 (树形dp)
- BZOJ 4813([Cqoi2017]小Q的棋盘-树)
- bzoj 4813: [Cqoi2017]小Q的棋盘 树形dp
- Elasticsearch Reference 5.5 中文翻译2
- 虚函数表
- 动态规划--01背包问题
- rrd安装和使用
- ZOJ 3600 Taxi Fare(模拟)
- 前缀和--BZOJ-4972 小Q的方格纸
- 日期工具类(二)
- Coderforces 20C 最短路记录路径
- rockchip如何增加分区配置信息(6.0)--原创
- 函数链接性和语言链接性
- Java中的多线程图文详解
- Freebsd安装内核源码
- 深入理解JavaScript浏览器线程
- POJ1840Eqs(哈希表)