首页 > 其他分享 >题解 P8648【[蓝桥杯 2017 省 A] 油漆面积】

题解 P8648【[蓝桥杯 2017 省 A] 油漆面积】

时间:2023-07-07 20:11:06浏览次数:47  
标签:y2 P8648 int 题解 rep 蓝桥 x2 y1 矩形

怎么题解区全是扫描线,还有个 \(O(n^3)\) 暴力老哥。

为防止误导新人,给个理论上稳过的 \(O(n^2)\) 解法。

二维前缀和可以处理若干次单点加,最后若干次矩形查的问题。

将其差分,即可处理若干次矩形加,最后若干次单点查的问题。

于是我们使用差分将所有矩形加上,然后做一遍二维前缀和,即可求出每个格子被几个矩形覆盖。统计有多少格子被至少一个矩形覆盖,输出即可。

注意本题卡空间,但注意到差分阶段每个格子只会被每个矩形 \(\pm 1\),每个格子的值不超过 \(10^4\),最终求前缀和后每个格子只会被每个矩形覆盖至多一次,值也不超过 \(10^4\),因此开 short 即可。

时间复杂度 \(O(n^2)\)。

//By: OIer rui_er
#include <bits/stdc++.h>
#define rep(x,y,z) for(int x=(y);x<=(z);x++)
#define per(x,y,z) for(int x=(y);x>=(z);x--)
#define debug(format...) fprintf(stderr, format)
#define fileIO(s) do{freopen(s".in","r",stdin);freopen(s".out","w",stdout);}while(false)
using namespace std;
typedef long long ll;

mt19937 rnd(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
int randint(int L, int R) {
    uniform_int_distribution<int> dist(L, R);
    return dist(rnd);
}

template<typename T> void chkmin(T& x, T y) {if(x > y) x = y;}
template<typename T> void chkmax(T& x, T y) {if(x < y) x = y;}

const int N = 1e4+5;

int n, ans;
short a[N][N];

int main() {
    scanf("%d", &n);
    rep(i, 1, n) {
        int x1, y1, x2, y2;
        scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
        ++a[x1][y1];
        --a[x1][y2];
        --a[x2][y1];
        ++a[x2][y2];
    }
    rep(i, 0, 10000) {
        rep(j, 0, 10000) {
            a[i][j] = int(i > 0 ? a[i-1][j] : 0) + (j > 0 ? a[i][j-1] : 0) - (i > 0 && j > 0 ? a[i-1][j-1] : 0) + a[i][j];
            if(a[i][j]) ++ans;
        }
    }
    printf("%d\n", ans);
    return 0;
}

标签:y2,P8648,int,题解,rep,蓝桥,x2,y1,矩形
From: https://www.cnblogs.com/ruierqwq/p/LG-P8648.html

相关文章

  • 「NOIP 模拟赛 20230707」T2 - 涂照片 题解
    题目大意原题有一个\(n+1\timesm+1\)的网格。对于每一行\(i\),都要将左侧的一些格子\((i,1),(i,2),\ldots,(i,x)\)涂黑,其中\(x=k\)的概率为\(a_{i,k}\)。同理对于每一列\(j\),都要将上方的一些格子\((1,j),(2,j),\ldots,(x,j)\)涂黑,其中\(x=k\)的概率为\(b_{k,......
  • P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解
    P7561[JOISC2021Day2]道路の建設案(RoadConstruction)题解题目描述JOI国是一个\(x\timesy\)的二维平面,王国里有\(n\)个城镇,分别编号为\(1,2,\cdots,n\in[1,2.5\times10^5]\),其中第\(i\)个城镇的坐标为\((x_i,y_i)\)。在JOI国,正计划修建连接两座城......
  • AT_bcu30_2019_qual_a 题解
    思路纯模拟题,给定N和P后,定义一个计数器sum,重复N次输入,每输入一次就判断P也就是子弹的能量是否≥每面墙的厚度x,如果是,就用P减去x,sum增加1,表示穿过了一面墙,否则跳出循环,输出sum。代码#include<iostream>usingnamespacestd;intmain(){intn,p,sum=0,......
  • AT_nikkei2019ex_h 题解
    思路这是一道博弈题,最优策略是高桥的k一直是1,青木的k一直是0,可以保证拿走的硬币不超过剩下的硬币,这样每次两人都取完后拿走硬币的数量是8^1+8^0,结果是9,那么就用Nmod9,得出的结果就是剩下的硬币。如果结果是0,那么最后拿的就是青木,输出Lose。如果结果是2、4、6,都......
  • 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(三)
    ​贴接上回。。。 【往期FAQ参考】【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一)【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(二) 【本期FAQ】1、第一次调用geolocation.getCurrentLocation()接口,弹出权限弹框后并未返回结果,再次调用接口才会成功返回?(API8......
  • AT_nikkei2019ex_e 题解
    思路进题扫一眼题目描述,可以写成这样:是不是很眼熟?这不就是角谷猜想嘛,但它不是让我们求步数果,而是求结果。它给了步数,求结果那就要倒推,第二个样例给了P最大时,也就是1000输出的结果1789997546303,我们就用这个结果往前推,带入角谷猜想的运算过程,就可以了。记得开longlong。......
  • AT_pakencamp_2020_day1_c 题解
    思路看到题目的第一句话我就知道要用map了。一道map的入门题,定义一个map来输入和统计参加次数后,定义一个计数器sum用来统计人数。代码#include<iostream>#include<string>#include<map>usingnamespacestd;map<string,int>personnel;intmain(){intn,sum......
  • CF1451F 题解
    problem&blog。这题原本的题解满是废话,让我写一篇(这边直接给结论了。令\(val_p=\oplus_{x+y=p}\a_{x,y}\),设\(S=\Big[\normalsize\forallval_i=0\Big]\),当\(S=\text{true}\)时,后手必胜;否则先手必胜。证明也是典中典。证两个条件即可。证明\(\forallS\Rightarr......
  • 记一次重装windows系统后笔记本键盘不能用的问题解决
    刚买了一台笔记本,预装的是Windows11。这个系统我见识过,优点还没看到,不习惯的地方很多。所以重装了Windows10LTSC。结果装完笔记本键盘不能用。这个情况之前用拯救者Y7000装plex的时候也遇到过,那时候没解决,这次非处理好不可下载驱动管理软件看,没有显示有对应键盘的驱动进设备管......
  • 题解-Codeforces Round 805 (Div. 3) E. Split Into Two Sets
    题解-CodeforcesRound805(Div.3)E.SplitIntoTwoSets(原题链接)[Problem-E-Codeforces]思路知识点:种类并查集网上关于种类并查集的教学已经很多,在此不赘述在理解种类并查集时,很多文章会提到“敌人”,“朋友”的概念。而在不同的题目中,互为“敌人”,“朋友”的两个......