小a的轰炸游戏(差分,前缀和)
题意:
给出一个n*m的矩形,然后有两个操作.
1操作,对一个给出的菱形,对菱形范围内的东西进行+1。
2操作,对一个上半菱形的区域,进行+1操作。
最后求矩形内各个数的异或和。
思路:
在矩形中,我们在四个角上进行++--,然后利用差分的性质,就解决了区间更新,
但是在这里,想破脑汁,也没想出怎么进行++--。因为矩形的差分是横着或者竖着的,
最后的求和非常容易,但是这里不一样。最后看了题解豁然大悟,原来差分还可以动态的来,
本行的差分数组使用完了,还可以把差分数组下传,继续在下一层继续起到作用,这是神奇的操作。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 3005
#define L 1000
int n,m,q;
int a[N][N],b[N][N],c[N][N],d[N][N];
int bb[N][N];
void up(int x,int y,int l)
{
a[x-l/][y]++;a[x+][y-l/-]--;
b[x-l/][y+]--;b[x+][y+l/+]++;
}
void down(int x,int y,int l)
{
c[x+][y-l/+]++;c[x+l/+][y+]--;
d[x+][y+l/]--;d[x+l/+][y]++;
}
int main()
{
while(~scanf("%d %d %d",&n,&m,&q))
{
/*memset(a,0,sizeof(a));
memset(b,0,sizeof(a));
memset(c,0,sizeof(a));
memset(d,0,sizeof(a));*/
while(q--)
{
int op;
int x,y,l;
scanf("%d %d %d %d",&op,&x,&y,&l);
x+=L,y+=L;
up(x,y,l);
if(op==) down(x,y,l);
}
int ans=;
for(int i=;i<n+*L;i++)
{
int cnt=;
for(int j=;j<m+*L;j++)
{
cnt+=a[i][j]+b[i][j]+c[i][j]+d[i][j];
if(i>=L+&&i<=L+n&&j>=L+&&j<=m+L){
ans^=cnt;//bb[i-L][j-L]=cnt;
}
a[i+][j-]+=a[i][j];
b[i+][j+]+=b[i][j];
c[i+][j+]+=c[i][j];
d[i+][j-]+=d[i][j];
}
}
/* for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<bb[i][j]<<" ";
}
cout<<endl;
}*/
printf("%d\n",ans);
}
return ;
}
参考:https://blog.csdn.net/qq_41289920/article/details/86683583
小a的轰炸游戏(差分,前缀和)的更多相关文章
- 差分数组|小a的轰炸游戏-牛客317E
小a的轰炸游戏 题目链接:https://ac.nowcoder.com/acm/contest/317/E 思路 这题考查的是对差分数组原理和前缀和的理解. 四个数组分别记录朝着四个方向下放的个数 ...
- [动态差分+二维前缀和][小a的轰炸游戏]
链接:https://ac.nowcoder.com/acm/contest/317/E来源:牛客网 题目描述 小a正在玩一款即时战略游戏,现在他要用航空母舰对敌方阵地进行轰炸 地方阵地可以看做是n× ...
- 小a的轰炸游戏 (差分)
我是看题解的! 这道题还是有很多细节,当然,是一道差分的好题! 题意:有2种飞机,一种是只炸上半菱形,一种是炸整个菱形.问所有区域内的所有格子的异或和. 思路:用前缀和思路: 这样遍历过去就完成了一次 ...
- 【BZOJ3436】小K的农场(差分约束)
[BZOJ3436]小K的农场(差分约束) 题面 由于BZOJ巨慢无比,使用洛谷美滋滋 题解 傻逼差分约束题, 您要是不知道什么是差分约束 您就可以按下\(Ctrl+W\)了 #include< ...
- BZOJ_3436_小K的农场_差分约束
BZOJ_3436_小K的农场_差分约束 题意: 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述 ...
- 微信小程序开发的游戏《拼图游戏》
微信小程序开发的游戏<拼图游戏> 代码直接考进去就能用 pintu.js // pintu.js Page({ /** * 页面的初始数据 */ data: { }, initGame: ...
- Educational Codeforces Round 61 C 枚举 + 差分前缀和
https://codeforces.com/contest/1132/problem/C 枚举 + 差分前缀和 题意 有一段[1,n]的线段,有q个区间,选择其中q-2个区间,使得覆盖线段上的点最多 ...
- HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】
理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class n ...
- HDU 5419——Victor and Toys——————【线段树|差分前缀和】
Victor and Toys Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others ...
随机推荐
- [CF11D]A Simple Task 题解
题解 我们从最简单的思路开始考虑,首先看到题目发现\(n\)非常小,于是很容易想到状态压缩. 我们考虑比较直觉的状态,f[i][j][k]表示以i为起点,当前在j,之前去过的点状态为k的简单环的方案数 ...
- 3D Computer Grapihcs Using OpenGL - 16 使用DrawElementsInstanced绘制立方体
我们使用15节学到的知识来绘制14节的立方体. 在第14节我们使用了两次glDrawElements实现了OpenGL实例化,发现这样仍然不太方便,如果需要绘制成千上万的立方体,就需要手写成千上万次的 ...
- 3D Computer Grapihcs Using OpenGL - 13 优化矩阵
上节说过矩阵是可以结合的,而且相乘是按照和应用顺序相反的顺序进行的.我们之前初始化translationMatrix和rotationMatrix的时候,第一个参数都是使用的一个初始矩阵 glm::m ...
- Bootstrap Table 的X-editable插件怎么用
在准备使用X-editable来做Bootstrap Table 的行内编辑的时候,根据http://www.cnblogs.com/landea... 的文章,我不能将全部效果重复实现,网上也搜索了 ...
- c++内置变量类型
1,各种变量占据的内存空间 char:1个字节,也可亦作为0-255的数值参与运算 一般来说,静态存储区的自动赋初值,动态则不自动(貌似也不对,因为非内置变脸的类型,也都调用了默认构造函数进行初始化) ...
- 第四周实验总结&实验报告
实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握用类作为类型声明变量和方法返回值: 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性 ...
- POST上传多张图片配合Django接受多张图片
POST上传多张图片配合Django接受多张图片 本地:POST发送文件,使用的是files参数,将本地的图片以二进制的方式发送给服务器. 在这里 files=[("img",op ...
- node.js npm 操作 模块化开发 cnpm镜像安装
模块(包) 传统引入 js 的缺点 整个网页,我们写了一个 js 文件,所有的特效都在里面 耦合度太高,代码之间关联性太强,不便于后期维护 变量容易 全局污染 如果将 复杂的 js 文件,拆成多个功能 ...
- tensorflow基本操作(1)
import tensorflow as tf import numpy as np 点乘,支持broadcasting 乘号* 和 multiply等价 mul已经废弃不用了 matmul 是矩阵相 ...
- iOS证书详解
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...