ABC233G Strongest Takahashi
题意:
有一个 \(n\times n\) 的网格,有一些格子上有方块。每次操作可以选择一个 \(D\times D\) 的正方形覆盖网格,代价为 \(D\)。问覆盖所有方块的最小代价和是多少。
数据范围:\(1\le n\le50\)。
性质:选择的正方形不会接壤。否则将这两个正方形和起来肯定不劣。
设 \(dp_{sl,sr,el,er}\) 表示覆盖左上角为 \((sl,sr)\),右下角为 \((el,er)\) 的矩形所需的最小代价。
转移可以枚举哪一行 / 列空着,分成两个子问题。
时间复杂度 \(\mathcal{O}(n^6)\),但远远跑不满。
Code:https://atcoder.jp/contests/abc233/submissions/29947922。
ABC233H Manhattan Christmas Tree
题意:
给出平面上 \(n\) 个点 \((x_i,y_i)\),有 \(Q\) 次询问。
询问 \(i\):离 \((a_i,b_i)\) 曼哈顿距离第 \(K\) 近的点距离是多少?
数据范围:\(1\le n,x_i,y_i,Q\le10^5\)。
看到曼哈顿距离,立马想到能不能转成切比雪夫距离,即 \((x,y)\to(x+y,x-y)\)。
发现在这道题里可以这样做。
于是对于每次询问二分答案 \(mid\),在以 \((a_i-mid,b_i-mid)\) 为左下角,\((a_i+mid,b_i+mid)\) 为右上角的正方形内看是否有 \(K\) 个点。这个可以用 动态开点的二维树状数组 / 主席树 做到。
Code:https://atcoder.jp/contests/abc233/submissions/29925632。