2025-11-7 10:20:00 TOP-BOTTOM-THEME
Enable/Disable Transition
Copyright © 2023 ~ 2025 Sinktank - 1328312655@qq.com
Illustration from 稲葉曇『リレイアウター/Relayouter/中继输出者』,by ぬくぬくにぎりめし.

ABC408

我的渴望转啊转啊

我的悔恨转啊转啊

我仍坚信我已坍塌

坍塌在她的废墟下

赛时

A - Timeout

检查是否存在 \(T_i - T_{i - 1} \gt S\)code

B - Compression

排序,去重。code

C - Not All Covered

求最小覆盖,差分。code

D - Flip to Gather

首先可以将其全变为 1,再尝试把两边变为0 ,需要 \(T\) 次操作 。

定义 \(f(i)\) 表示将字符串 \([1, i]\) 全变为 0 所需要的操作数,\([1, i]\)0 会使 \(T\) 减小,1 会使 \(T\) 增大。

定义 \(g(i)\) 表示将字符串 \([i, n]\) 全变为 0 所需要的操作数,一样做。

然后前缀min就好。code

E - Minimum OR Path

从高到底枚举每一位,如果某条边上该位为 \(1\),就暂时删去。然后检查 \(1\) 能否到 \(n\)。能就将那些边永久删去。不能就让答案加上这一位。

并查集检查连通性。code

补题

F - Athletic

赛时想到了,来不及写。

\(H\) 排序,定义 \(f(i)\) 表示最多次数,顺序遍历过程中将 \(i - D\)\(f(i)\) 加入到线段树中,然后在下标区间里找最大值。

    update(1, 1, n, a[i - d].second, f[i - d]);
    f[i] = query(1, 1, n, max(1, a[i].second - r - 1), min(n, a[i].second + r)) + 1;

这样写是错的,因为会从不存在的状态里转移过来。

要写成

    update(1, 1, n, a[i - d].second, f[i - d] + 1);
    f[i] = query(1, 1, n, max(1, a[i].second - r - 1), min(n, a[i].second + r));

code

posted @ 2025-06-01 10:18  FRZ_29  阅读(45)  评论(0)    收藏  举报