小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 ...
随机推荐
- 解决html5大文件断点续传
一.概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载.在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了.一般断点下载时才用到Range和Content- ...
- php大文件上传支持断点上传
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- #419 Div2 Problem C Karen and Game (贪心 && 暴力)
题目链接:http://codeforces.com/contest/816/problem/C 题意 :给出一个 n*m 的变化后的矩阵,变化前矩阵的元素全是0,变化的规则是选择其中的一行或者一列将 ...
- 分布式架构基石-TCP通信协议
为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...
- [CSP-S模拟测试]:最小距离(最短路)
题目传送门(内部题97) 输入格式 第一行三个整数$n,m,p$,第二行$p$个整数$x_1\sim x_p$表示特殊点的编号.接下来$m$行每行三个整数$u,v,w$表示一条连接$u$和$v$,长度 ...
- yum install ntp 报错:Error: Package: ntp-4.2.6p5-25.el7.centos.2.x86_64 (base)
redhat7 在安装ntp时报如下错误 Error: Package: ntp-4.2.6p5-25.el7.centos.2.x86_64 (base) Requires: ntpdate = 4 ...
- vue php实战项目开发(一)
说在前面 项目开发过程中一直在学习,所以记录的过程可能比较乱,打算前台使用vue,后台使用php开发手机端的项目,这里记录遇到的问题和学习的过程 phpstudy环境下搭建虚拟域名,并开启URL重写 ...
- 190707select和selector模块
一.select模块 Python select socket server代码示例 # Author:Li Dongfei import select, socket, sys, queue ser ...
- C# Setting.settings . 用法 2 使用配置文件(.settings、.config)存储应用程序配置
引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...
- Spring框架中的依赖注入
依赖注入(DI : Dependency Injection)是基于.xml配置文件内节点的书写. 注入类型: 1.设置注入,调用了Bean的setXXX()进行值注入 普通属性(value值表示要显 ...