AtCoder Beginner Contest 265 Solution

更好的阅读体验戳此进入

题面链接

题面 Luogu 链接

abc不说了

[ABC265D] Iroha and Haiku (New ABC Edition)

题面

题意:

有一个长度为N的数列A=(A0,...,AN1),

判断有满足以下所有条件的整数(x,y,z,w)是否存在

Solution

一个比较显然的思路就是枚举 x 然后二分 y,z,w,或者用 set 也行,复杂度都是 O(nlogn) 的,似乎可以直接用单调性均摊线性解决,不过没必要。

Code

[ABC265E] Warp

题面

ZK 现在在一个二维平面。他现在会进行 N 次传送,每次传送回执行如下移动之一:

同时在这个平面上有 M 个点 (X1,Y1),,(XM,YM) ,这些点 ZK 是无法停留或经过的。

N 次传送一共会有多少种路径?输出答案对 998244353 取模。

Solution

十分显然的 DP,令 dp(i,j,k) 表示 i 次第一种 j 次第二种 k 次第三种的方案数,判断一下能不能走即可。

Code

[ABC265F] Manhattan Cafe

题面

n 维空间中存在 p,q 两点,求有多少个整点满足到 p,q 的曼哈顿距离均不大于 d

Solution

细节巨多的 DP。

首先有一个较为显然的 3D1DO(nd3) 的做法,即令 dp(i,j,k) 表示考虑前 i 维到 p 曼哈顿距离为 j,到 q 曼哈顿距离为 k 的方案数,然后这个东西 O(d) 的转移较为显然,即枚举 i 维的坐标,令其为 x 则转移为:

dp(i,j,k)=xdp(i,j|xpi|,k|xqi|)×[|xpi|d|xqi|d]

然后这个东西实际上是可以通过类似前缀和的东西转移的,但是是类似对角线前缀和的,比较复杂细节巨多,所以这里参考以下机房大佬 @sssmzy 的做法。

考虑将状态修改为 dp(i,j,k) 表示考虑前 i 维,到 pq 的曼哈顿距离和为 j,到 p 的曼哈顿距离为 k

这个时候考虑两种可能性,对于某次枚举的位置 x,若满足 pixqiqixpi,也就是说 xp,q 之间,那么 j 这一维是从 j|piqi| 转移而来,而 kkk|piqi| 这段区间转移而来,那么即可以用前缀和转移。

考虑对于 xp,q 之外的情况,那么对于每个 xx+1xx1,显然存在 jj+2,kj+1。所以我们只需要再维护一个前缀和 sum2(j,k)=sum2(j2,k1)+dp(j,k) 即可。

具体来说,维护一个 sumsum2,意义同上。同时因为空间问题我们需要把第一维滚动掉。具体的转移即若 j<|piqi| 那么 dp(j,k)=0。否则令 dis=|piqi|,即为:

dp(j,k)=sum(jdis,k)sum(jdis,kdis1)+sum2(jdis2,k1)+sum2(jdis2,kdis1)

转移的意义即为在 p,q 中间和分别在 p,q 的两侧。

于是每次处理完 DP 后清空并重新维护 sum,sum2 即可。

最终复杂度为 O(nd2),可以通过。

Code

[ABC265G] 012 Inversion

题面

有一个元素全为 0,12 的数列 A=(A1,A2,,An)。现在有两种操作:

  1. 1 L R:询问区间 [L,R] 内的逆序对数量;
  2. 2 L R S T U:将区间 [L,R] 内的所有 0 改为 S1 改为 T2 改为 U

Solution

显然线段树。每个节点维护 cntx,y 表示多少对 (x,y) 的逆序对,维护 sizx 表示多少个 x,再维护一下 lazytag,东西虽然比较多但是很显然且直观,细节不少。

Code

题面

 

Solution

 

Code

UPD

update-2022__ 初稿