ABC312 题解

ABC312 题解

每个代码都有板子,不建议引用。

如果想要去除万恶的板子,把代码放入 .cpp 文件(此处命名为 a.cpp)。

然后在 cmd 中输入(当然要先进入对应地址) g++ -E a.cpp -> a.i

然后 g++ 会发疯,等 .i 文件大约达到 2.1MB 时,停止进程,把最后一段看得懂的代码粘贴过去就行了。

详细原理:https://blog.csdn.net/weixin_39455125/article/details/123994743

A

Overview

字符串分支结构。(我是怎么想到的

Description

给出一个字符串,问该字符串是否为 ACEBDFCEGDFAEGBFACGBD

Idea

直接暴力扫一遍就可以了。

B

Overview

模拟题, O ( n 2 ) O(n^2) O(n2) 解决

Description

前置知识:二维数组。

给定一个字符矩阵,每个字符为 #.,问满足以下条件的 9 × 9 9\times 9 9×9 的矩阵个数:

  • 左上 3 × 3 3 \times 3 3×3 和 右下 3 × 3 3 \times 3 3×3 的子矩阵都是 #
  • 与上面提到的矩阵相邻的 L 形边框都是 .

Idea

考虑对应法,每个 ( x , y ) (x,y) (x,y) 表示一个 9 × 9 9 \times 9 9×9 的矩阵。

比较烦,这里只给代码。

C

Overview

离散化 + 差分。

Description

给定 n n n 个卖家和 m m m 个买家。

每个卖家的可接受价格范围为 [ a i , + ∞ ) [a_i, +\infty) [ai,+)

每个买家的可接受价格范围为 ( − ∞ , b i ] (-\infty, b_i] (,bi]

问最小的 x x x,满足可接受的买家个数小于等于可接受的卖家个数。

Idea

前置知识:二分、STL。

Solution 1

显然问题满足单调性,二分答案。

复杂度 O ( n log ⁡ K ) O(n\log K) O(nlogK),其中 K K K a ∪ b a \cup b ab 的元素的最大值。

Solution 2

注意到答案肯定是 a i a_i ai b i + 1 b_i + 1 bi+1

a , b a,b a,b 离散化,扔到一个 vector 里。

暴搜即可。

D

Overview

简单 DP。

Description

给出一个括号串,其中 ? 代表不限。

问匹配括号串的方案数。

Idea

前置知识:DP,括号匹配。

d i , j d_{i,j} di,j i i i 个字符,栈内还剩 j j j 个元素。

这样转移方程就可以出来了。

d i , j = { d i − 1 , j − 1 s i = ( d i − 1 , j + 1 s i = ) d i − 1 , j − 1 + d i − 1 , j + 1 s i = ? d_{i, j}=\left\{\begin{aligned}&d_{i - 1, j - 1} &s_i = \texttt{(} \\ &d_{i - 1, j + 1} &s_i = \texttt{)} \\ &d_{i - 1, j - 1} + d_{i - 1, j + 1}&s_i=\texttt{?} \end{aligned}\right. di,j= di1,j1di1,j+1di1,j1+di1,j+1si=(si=)si=?

E

Overview

恶评,最多 ∗ 1400 *1400 1400

但还是好题。

Description

给出 n n n 个长方体,彼此没有体积交

问有多少对长方体有面积交(共用面)。

Idea

前置知识:STL 进阶。

绝世好题。

枚举每一个二维单位方格(当然三个方向分开处理),看有没有被共用。

需要存储每个方格被谁共用,存到 set 里面。

思考:为什么这么做是对的?为什么枚举方格而不枚举单位立方体?

如果一个方格被三个长方体共用,显然有体积交,排除;
如果枚举单位立方体,在立方体角上或边上立方体并不一一对应,从而导致了有可能被三个共用。

复杂度 O ( K 3 ) O(K^3) O(K3),其中 K K K 指最大的坐标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值