1 条题解

  • 0
    @ 2025-8-24 22:29:51

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 樱初音斗橡皮
    (只读)真是个有趣的世界呢

    搬运于2025-08-24 22:29:51,当前版本为作者最后更新于2021-02-19 20:00:55,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目大意:给定 n×mn\times m 网格以及 qq1×11\times 1 的障碍物,问能画出多少个周长不大于 kk 的、四边平行于坐标轴的矩形。

    数据范围:1n,m1091\le n,m\le 10^94k1094\le k\le 10^91q201\le q\le 20

    解答:

    看到“不包含障碍点”而 qq 又很小,容易想到容斥计算贡献。

    设仅考虑障碍物集合 SS 时方案数 fSf_S,则:

    Ans=SfS(1)SAns=\sum_S f_S(-1)^{|S|}

    情况 1. SS 非空

    设障碍物中 xxyy 坐标的最小、最大值分别是 xm,ymx_m,y_mxM,yMx_M,y_M

    g(x0,y0)g(x_0,y_0) 表示不考虑网格边界且 xMxm+1=x0,yMym+1=y0x_M-x_m+1=x_0,y_M-y_m+1=y_0 的答案,则:

    $$g(x_0,y_0)=\sum_{x\ge x_0}\sum_{y\ge y_0}[x+y\le \dfrac k 2](x-x_0+1)(y-y_0+1) $$$$=\sum_{x\ge 1}\sum_{y\ge 1}[x+x_0-1+y+y_0-1\le \dfrac k 2]xy $$

    s=k2+2x0y0s=\dfrac k 2 + 2-x_0-y_0,则:

    g(x0,y0)=x=1sxy=1sxyg(x_0,y_0)=\sum_{x=1}^{s}x\sum_{y=1}^{s-x}y =x=1sx((sx)(sx+1)2)=\sum_{x=1}^sx\big(\dfrac{(s-x)(s-x+1)}{2}\big)

    可以通过 x=1sx\sum_{x=1}^s xx=1sx2\sum_{x=1}^sx^2x=1sx3\sum_{x=1}^sx^3 的公式 O(1)O(1) 算出。

    那么考虑到网格的边界情况又怎么求呢?很简单,对网格的四边进行容斥即可。

    具体地,设 hS,Th_{S,T} 表示仅考虑障碍物集合 SS、边界集合 TT 时的答案,则 fS=ThS,T(1)Tf_S=\sum_Th_{S,T}(-1)^{T}

    如何计算 hh?一个简单的办法是:在考虑边界 x=0x=0 时把 xmx_m 强制设为 00,在考虑边界 x=nx=n 时把 xMx_M 强制设为 n+1n+1,可以想象在原有的格子外加了一格并强制要求包含此格。

    情况 2. SS 为空

    此时,答案为:

    $$f_S=\sum_{x=1}^n\sum_{y=1}^m[x+y\le \dfrac k 2](x_0-x+1)(y_0-y+1) $$$$=\sum_{x=1}^{\min(n,\frac k 2)}(x_0-x+1)\sum_{y=1}^{\min(m,\frac k 2-x)}(y_0-y+1) $$

    根据 mmk2x\dfrac k 2-x 的大小关系分段考虑即可。每一段都可以 O(1)O(1) 求出。

    总复杂度 O(2q)O(2^q) 外加巨大常数。

    • 1

    信息

    ID
    6473
    时间
    800ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者