AtCoder Beginner Contest 233 题解(A-Ex)

A、B 略。

ABC233C - Product

实际上就是一个简单 dp,但是

  • 数组上范围比较大,需要用 map 维护下标以及转移点。
  • 答案爆 long long,需使用 __int128
using i128 = __int128;
vector<map<i128, i128>> mp;

int main() {
    i128 n, X; read(n, X);
    mp.resize(n + 1);
    mp[0][1] = 1;
    FOR(i, 1, n) {
        int l; read(l);
        FOR(j, 1, l) {
            i128 x; read(x);
            for (auto p : mp[i - 1])
                mp[i][p.first * x] += p.second;
        }
    }
    print(mp[n][X]);
    return output(), 0;
}

ABC233D - Count Interval

记录前缀和,开 map 查询即可。

ABC233E - Σ[k=0…10100]floor(X/10k)

看着很困难实际上观察每一位的贡献即可。进一下位就做完了。

ABC233F - Swap and Sort

简要题意:给定排列 P P P n ≤ 1000 n\le 1000 n1000。同时给定 m m m 组关系 ( a i , b i ) (a_i, b_i) (ai,bi),每次可以交换 P a i P_{a_i} Pai P b i P_{b_i} Pbi。构造一个最多 5 × 1 0 5 5\times 10^5 5×105 步的方案使得 P P P 为升序。

整个问题可以抽象成一张图。然后可以发现,当且仅当数字 p i p_i pi 和点 i i i 在一个连通分量内时整个问题有解,这个问题可以写一个并查集之类的东西判断一下。

然后构造方案。由于不要求最优性,所以我们可以直接考虑建出一个生成树,然后从点度为 1 1 1 的点开始逐个复位并删点。操作次数最多为 999 + 998 + ⋯ + 1 = 499500 999 + 998 + \cdots + 1 = 499500 999+998++1=499500评测记录

ABC233G - Strongest Takahashi

简要题意:给定一张 N × N N\times N N×N 1 ≤ N ≤ 50 1\le N\le 50 1N50)网格,里面若干个格子有障碍。每次可以选择一个 D × D D\times D D×D 的区域然后消耗 D D D 点体力将其中的障碍消去。问将所有障碍消去的最小体力消耗。

这种高维度的 dp 一直是我的弱点。。。考虑一个 A × B A\times B A×B 的矩形区域(子问题),我们显然需要 C = max ⁡ ( A , B ) C = \max(A,B) C=max(A,B) 的体力来覆盖整个矩形。然而可能存在更少的体力消耗就能覆盖。具体地,当存在一个空行/空列时,我们就可以考虑将子矩形划开,变成两个独立子问题,看一下有没有更优解。

所以设一个 f l , u , r , d f_{l,u,r,d} fl,u,r,d 来进行 dp(使用记搜转移)即可,转移复杂度似乎是 O ( n 5 ) O(n^5) O(n5) 的,评测记录

ABC233Ex - Manhattan Christmas Tree

简要题意:给定平面内 n n n 个点, q q q 次询问到 ( a , b ) (a, b) (a,b) k k k 近的点到 ( a , b ) (a, b) (a,b) 的距离,这里的距离指曼哈顿距离。 5 × 1 0 5 5\times 10^5 5×105,7s。

首先我们发现曼哈顿距离很不好处理第 k k k 近之类的问题,因为既要考虑两个维度又有绝对值。所以考虑将每个点 ( x , y ) (x, y) (x,y) 变成 ( x + y , x − y ) (x + y, x - y) (x+y,xy),这样原图的曼哈顿距离就可以被转化为切比雪夫距离。

于是我们对于每个询问就可以二分一下第 k k k 近的距离,查询有多少个点到 ( a , b ) (a,b) (a,b) 的切比雪夫距离 ≤ d \le d d,这个查询其实就是一个二维数点(查询矩形和),可以通过写一个主席树来实现。复杂度为 O ( ( n + Q ) log ⁡ 2 X ) O((n + Q)\log^2X) O((n+Q)log2X) X X X 为点的值域。主席树写着有点心烦,要注意细节,评测记录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值