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

题目描述

方格纸与草稿纸一样,都是算法竞赛中不可或缺的重要工具。身经百战的小Q自然也会随身带着方格纸。小Q的方格纸有n行m列,一共n*m个方格,从上到下依次标记为第1,2,...,n行,从左到右依次标记为第1,2,...,m列,方便起见,小Q称第i行第j列的方格为(i,j)。小Q在方格纸中填满了数字,每个格子中都恰好有一个整数a_{i,j}。小Q不喜欢手算,因此每当他不想计算时,他就会让你帮忙计算。小Q一共会给出q个询问,每次给定一个方格(x,y)和一个整数k(1<=k<=min(x,y)),你需要回答由(x,y),(x-k+1,y),(x,y-k+1)三个格子构成的三角形边上以及内部的所有格子的a的和。

输入

第一行包含6个正整数n,m,q,A,B,C(1<=n,m<=3000,1<=q<=3000000,1<=A,B,C<=1000000)

其中n,m表示方格纸的尺寸,q表示询问个数。

为了防止输入数据过大,a和询问将由以下代码生成:

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;

}

int main(){

scanf("%d%d%d%u%u%u", &n, &m, &q, &A, &B, &C);

for(i = 1; i <= n; i++)

for(j = 1; j <= m; j++)

a[i][j] = rng61();

for(i = 1; i <= q; i++){

x = rng61() % n + 1;

y = rng61() % m + 1;

k = rng61() % min(x, y) + 1;

}

}

输出

为了防止输出数据过大,设f_i表示第i个询问的答案,则你需要输出一行一个整数,即:

(sum_{i=1}^q 233^{q-i}*f_i) mod 2^{32}

样例输入

3 4 5 2 3 7

样例输出

3350931807



题解

前缀和

考虑答案怎么组成:

(0,0)

显然答案(红色区域)等于黑色边框(矩形)面积 - 蓝色边框(大三角形)面积 + 绿色边框(小三角形)面积。

于是维护两种前缀和:第一种维护一般的矩形区域二维前缀和,第二种维护直角边边长为x,左下角横坐标为y,纵坐标为1的等腰直角三角形的数之和。

然后乱搞就过了。为了防止n和m弄混,可以令n‘=m‘=max(n,m)。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 3010
using namespace std;
unsigned A , B , C , a[N][N] , sum[N][N] , ste[N][N];
inline unsigned rng61()
{
    A ^= A << 16;
    A ^= A >> 5;
    A ^= A << 1;
    unsigned t = A;
    A = B;
    B = C;
    C ^= t ^ A;
    return C;
}
int main()
{
    int n , m , q , i , j , x , y , k;
    unsigned ret , ans = 0;
    scanf("%d%d%d%u%u%u" , &n , &m , &q , &A , &B , &C);
    for(i = 1 ; i <= n ; i ++ )
        for(j = 1 ; j <= m ; j ++ )
            a[i][j] = rng61();
    for(i = 1 ; i <= max(n , m) ; i ++ )
        for(j = 1 ; j <= max(n , m) ; j ++ )
            sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + a[i][j];
    for(i = 1 ; i <= max(n , m) ; i ++ )
        for(j = max(n , m) ; j >= 1 ; j -- )
            ste[i][j] = ste[i - 1][j + 1] + sum[j][i] - sum[j - 1][i];
    while(q -- )
    {
        x = rng61() % n + 1;
        y = rng61() % m + 1;
        k = rng61() % min(x , y) + 1;
        ret = (sum[x][y] - sum[x - k][y]) - (ste[y - 1][x - k + 1] - ste[y > k ? y - k - 1 : 0][x + 1]);
        ans = ans * 233 + ret;
    }
    printf("%u\n" , ans);
    return 0;
}
时间: 2024-10-28 15:47:31

【bzoj4972】小Q的方格纸 前缀和的相关文章

bzoj 4972 小Q的方格纸

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4972 题意: 给一个方格纸,每一个格子有一个数val,q个询问,每次询问一个x,y,k,求(x,y),(x-k+1,y),(x,y-k+1)三个格子构成的三角形边上以及内部的所有格子的val的和.答案输出sigma((233)^(q-i)*fi)%(2^32),fi为第i次询问的答案. 题解:     图做的太丑了.....凑合着看吧... 根据题意其实就是求上图黑色部分,黑色部分可以看成

重庆OI2017 小 Q 的棋盘

小 Q 的棋盘 时间限制: 1 Sec  内存限制: 512 MB 题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2…,V-1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点.小Q在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的.小Q现在想知道,当棋子从格点0出发,移动N步最多能经过多少格点.格点可以重复经过多次,但不重复计数. 输入 第

HDU 4520 小Q系列故事——最佳裁判

Time Limit : 500/200ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛. 小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参

二分图 [ZJOI2007] 小Q的矩阵游戏

[问题描述] 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: l 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) l 列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色) 游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色. 对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本

hdu4505小Q系列故事——电梯里的爱情

小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3626    Accepted Submission(s): 2284 Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯

hdu4505 小Q系列故事——电梯里的爱情(水题)

Problem Description http://acm.hdu.edu.cn/showproblem.php?pid=4505 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯里,小Q才有勇气如此近距离接近女神,虽然觉得有点不自在,但次数多了,女神也习惯了小Q的存在,甚至熟悉到仿佛不说上句话自己也都觉得不合适了.可是,他们的谈话也仅仅限于今天天气不错啊或是你吃了吗之类的,往往在对方微笑点

hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1751    Accepted Submission(s): 628 Problem Description 世界上最遥远的距离 不是生与死 而是我就站在你面前 你却不知道我爱你 世界上最遥远的距离 不是我就站在你面前你却不知道我爱你 而是明明知道彼此相爱

bzoj4814: [Cqoi2017]小Q的草稿

Description 小Q是个程序员.众所周知,程序员在写程序的时候经常需要草稿纸.小Q现在需要一张草稿纸用来画图,但是桌上 只有一张草稿纸,而且是一张被用过很多次的草稿纸.草稿纸可以看作一个二维平面,小Q甚至已经给它建立了直 角坐标系.以前每一次草稿使用过的区域,都可以近似的看作一个平面上的一个三角形,这个三角形区域的内部和 边界都不能再使用.当然了,以前的草稿也没有出现区域重叠的情况.小Q已经在草稿纸上画上了一些关键点,这 些关键点都在没使用过的区域.小Q想把这些关键点两两之间尽可能的用线

小Q系列故事——最佳裁判

Time Limit:200MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月.  好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛.  小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参加,而且中国队员获