小a的轰炸游戏 (差分)

news/2024/7/3 6:38:26

我是看题解的!

这道题还是有很多细节,当然,是一道差分的好题!

 

 

题意:有2种飞机,一种是只炸上半菱形,一种是炸整个菱形。问所有区域内的所有格子的异或和。

思路:用前缀和思路;

这样遍历过去就完成了一次轰炸。

但是,这样是不现实的,因为不可能每次都这样做。但是下面一下就可以。

这里,我尽量写清楚这道好题的主要思路。

也就是使用a, b,c,d4个数组来存储1和-1;然后再箭头方向更新!就很好了。

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
const int maxn = 3e3 + 100, L = 1e3;
const int maxm = 1e5 + 100;
const ll INF = 1e16;
int a[maxn][maxn], b[maxn][maxn], c[maxn][maxn], d[maxn][maxn];
int n, m, k;

void up(int x, int y, int l){
    a[x - l / 2][y]++;    b[x - l / 2][y + 1]--;
    a[x + 1][y - l / 2 - 1]--; b[x + 1][y + l / 2 + 2]++;
}
void down(int x, int y, int l){
    c[x + 1][y - l / 2 + 1]++; d[x + 1][y + l / 2]--;
    c[x + l / 2 + 1][y + 1]--; d[x + l / 2 + 1][y]++;
}

int main(){
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 0, op, x, y, l; i < k; ++i){
        scanf("%d%d%d%d", &op, &x, &y, &l);
        x += L;    y += L;
        up(x, y, l);
        if (op == 1)down(x, y, l);
    }
    int res = 0;
    for (int i = 0; i < n + 2 * L; ++i)
    {
        int ans = 0;
        for (int j = 0; j < m + 2 * L; ++j){
            ans += a[i][j] + b[i][j] + c[i][j] + d[i][j];
            if (i >= L + 1 && i <= L + n&&j >= L + 1 && j <= L + m)res ^= ans;
            a[i + 1][j - 1] += a[i][j];
            b[i + 1][j + 1] += b[i][j];
            c[i + 1][j + 1] += c[i][j];
            d[i + 1][j - 1] += d[i][j];
        }
    }
    cout << res << endl;
}

 

转载于:https://www.cnblogs.com/ALINGMAOMAO/p/10388407.html


http://www.niftyadmin.cn/n/1583412.html

相关文章

每个 JavaScript 工程师都应懂的33个概念

简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备&#xff0c;但在未来学习&#xff08;JavaScript&#xff09;中&#xff0c;可以作为一篇指南。 本篇文章是参照 leonardomso 创立&#xff0c;英文版项目地址在这里。 由于原版资源都要翻墙&#xff0…

小森动画回忆录(二)-同步奥特曼属性到程序

上篇说到了如何设计了数据 采用了啥方式 先干了再解释 同步奥特曼属性到程序-源码实现 //从文件加载迪迦奥特曼属性数据到程序中 void LoadUltramanMainAttribute(vector<DejaAltmanAttribute>& dejaAltmanAttribute){//打开迪迦奥特曼属性.txt文件读取 ifstre…

使用nginx+uwsgi部署Django项目

一&#xff1a;安装nginx1&#xff1a;安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel2&#xff1a;安装PCREwget https://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz tar zxvf pcre-8.35.tar.gz cd…

.NET(C#)有哪些主流的ORM框架,FreeSql,SqlSugar,Dapper,EF还是...

前言 在以前的一篇文章中&#xff0c;为大家分享了《什么是ORM&#xff1f;为什么用ORM&#xff1f;浅析ORM的使用及利弊》。那么&#xff0c;在目前的.NET(C#)的世界里&#xff0c;有哪些主流的ORM&#xff0c;FreeSql&#xff0c;SqlSugar&#xff0c;Dapper&#xff0c;Enti…

Django作为接口时跨域问题解决

一&#xff1a;安装django-cors-headerspip install django-cors-headers二&#xff1a;配置settings.py# Application definition INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,…

2019年,你需要关注这些Node API和Web框架

对于Node.js框架和开源软件来说&#xff0c;2018年是非常有趣的一年。开发者社区讨论了企业赞助对开源项目的作用以及如何维护那些没有经济支持却有数百万人使用的项目。同样&#xff0c;安全问题也得到了极大关注&#xff0c;一些流行的Node/JS软件包被劫持&#xff0c;Github…

python使用Crypto库实现加密解密

一&#xff1a;crypto库安装pycrypto&#xff0c;pycryptodome是crypto第三方库&#xff0c;pycrypto已经停止更新三年了&#xff0c;所以不建议安装这个库&#xff1b;pycryptodome是pycrypto的延伸版本&#xff0c;用法和pycrypto 是一模一样的&#xff1b;所以只需要安装pyc…

Celery-------异步任务

Celery-------异步任务 1.什么是Celery?  Celery 是基于Python实现的模块, 用于执行异步定时周期任务的  其结构的组成是由   1.用户任务 app   2.管道 broker 用于存储任务 官方推荐 redis rabbitMQ / backend 用于存储任务执行结果的   3.员工 worker 2…