题目传送门

题意:

给出一个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的轰炸游戏(差分,前缀和)的更多相关文章

  1. 差分数组|小a的轰炸游戏-牛客317E

    小a的轰炸游戏 题目链接:https://ac.nowcoder.com/acm/contest/317/E 思路  这题考查的是对差分数组原理和前缀和的理解. 四个数组分别记录朝着四个方向下放的个数 ...

  2. [动态差分+二维前缀和][小a的轰炸游戏]

    链接:https://ac.nowcoder.com/acm/contest/317/E来源:牛客网 题目描述 小a正在玩一款即时战略游戏,现在他要用航空母舰对敌方阵地进行轰炸 地方阵地可以看做是n× ...

  3. 小a的轰炸游戏 (差分)

    我是看题解的! 这道题还是有很多细节,当然,是一道差分的好题! 题意:有2种飞机,一种是只炸上半菱形,一种是炸整个菱形.问所有区域内的所有格子的异或和. 思路:用前缀和思路: 这样遍历过去就完成了一次 ...

  4. 【BZOJ3436】小K的农场(差分约束)

    [BZOJ3436]小K的农场(差分约束) 题面 由于BZOJ巨慢无比,使用洛谷美滋滋 题解 傻逼差分约束题, 您要是不知道什么是差分约束 您就可以按下\(Ctrl+W\)了 #include< ...

  5. BZOJ_3436_小K的农场_差分约束

    BZOJ_3436_小K的农场_差分约束 题意: 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述 ...

  6. 微信小程序开发的游戏《拼图游戏》

    微信小程序开发的游戏<拼图游戏> 代码直接考进去就能用 pintu.js // pintu.js Page({ /** * 页面的初始数据 */ data: { }, initGame: ...

  7. Educational Codeforces Round 61 C 枚举 + 差分前缀和

    https://codeforces.com/contest/1132/problem/C 枚举 + 差分前缀和 题意 有一段[1,n]的线段,有q个区间,选择其中q-2个区间,使得覆盖线段上的点最多 ...

  8. HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】

    理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class n ...

  9. HDU 5419——Victor and Toys——————【线段树|差分前缀和】

    Victor and Toys Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others ...

随机推荐

  1. 使用 CSS 显示 XML

    通过使用 CSS,可为 XML 文档添加显示信息. 使用 CSS 显示您的 XML? 使用 CSS 来格式化 XML 文档是有可能的. 下面的例子就是关于如何使用 CSS 样式表来格式化 XML 文档 ...

  2. 【BZOJ3894】 文理分科

    Description  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过)  小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位. ...

  3. QT信号槽 中的对象野指针

    例: connect(&objec1,&class::slot_func1,&object2,&class::slot_func2) 如果 &objec   传 ...

  4. wannafly 挑战赛8 E 小G的项链(manecher)

    链接:https://www.nowcoder.com/acm/contest/57/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit ...

  5. smartload跨浏览器极速缓存插件用法

    smartload由39smart团队原创,主要实现前端css/js的一次加载请求,永久缓存的加速效果,在移动端效果非常明显. 插件特点: 支持平台: PC和移动端所有版本浏览器,ie6+,firef ...

  6. JavaWEB开发03——JS

    今日任务 使用JS完成页面定时弹出广告 使用JS完成表单的校验 使用JS完成表格的隔行换色 使用JS完成复选框的全选效果 使用JS完成省市的联动效果 JS控制下拉列表左右选择 教学导航 掌握JS中的B ...

  7. 多层全连接神经网络实现minist手写数字分类

    import torch import numpy as np import torch.nn as nn from torch.autograd import Variable import tor ...

  8. sed扩展命令使用

    [root@b ~]# cat f.txt inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0[root@b ~]# cat ...

  9. vue入门demo:用户管理3

    该入门demo是使用组件的方式实现,不涉及向后端发送请求 说明 把用户列表和添加用户拆分为两个组件,用户列表数据在父组件 获取用户列表:用户列表组件获取父组件的用户列表(父组件向子组件传值)1-1 1 ...

  10. 2018.03.27 python pandas merge join 使用

    #2.16 合并 merge-join import numpy as np import pandas as pd df1 = pd.DataFrame({'key1':['k0','k1','k2 ...