ABC221G/ABC240G 题解

blog。很典的 trick!记录一下。

关键技巧:走相邻点很难处理,通过改变坐标轴意义,将维度分开考虑。

ABC221G

两维混在一起,每一步决策需要考虑两维,非常麻烦。

考虑将 \((x,y)\) 转为 \((x+y,x-y)\),那么每一步操作有如下变化。

  • 上:\((x,y+d_i)\to(x+d_i,y-d_i)\)
  • 下:\((x,y-d_i)\to(x-d_i,y+d_i)\)
  • 右:\((x+d_i,y)\to(x+d_i,y+d_i)\)
  • 左:\((x-d_i,y)\to(x-d_i,y-d_i)\)

发现两维被拆开了,等价于,解决两次下面的问题。

钦定 \(o_i\in{-1,1}\),使得 \(\sum\limits_{i=1}^no_i\times d_i=T\)

对等式左侧提出一倍的 \(\sum\limits_{i=1}^nd_i\) 并移项,等价于解决:

钦定 \(o_i\in{0,1}\),使得 \(\sum\limits_{i=1}^no_i\times d_i=\dfrac{T-\sum d_i}2\)

即 01 背包问题,直接做即可。时空都有点小爆,bitset 优化即可通过。

code,时间复杂度 \(O(\dfrac{n\times\sum |d_i|}\omega)\)

ABC240G

也就是将上面那个转化思路,上升到三维去计数。

不会三维怎么办?枚举走 \(i\) 步到达 \(Z\) 点,贡献为 \(\Large\binom ni\) 乘以「\(i\) 步走到 \(Z\) 方案数」。

剩下就是用 \(N-i\)\((0,0)\to(X,Y)\)

与 ABC221G 一样,转成 \((0,0)\to(X+Y,X-Y)\),两维分开考虑,贡献即「\(n-i\) 步走到 \(X+Y\) 方案数」乘以「\(n-i\) 步走到 \(X-Y\) 方案数」。

Little problem:如何计算「\(t\) 步走到 \(p\) 的方案数」?
必定是走 \(\dfrac{t+p}2\) 步正向的,\(\dfrac{t-p}2\) 步反向的,方案即 \(\large\binom{t}{\frac{t-p}2}\)
\(\dfrac{t-p}2\notin\mathbb{N}\) 则方案数为 \(0\)

于是枚举 \(i\) 即可。

code,时间复杂度 \(O(n)\)

posted @ 2024-04-19 16:00  liangbowen  阅读(32)  评论(0编辑  收藏  举报