专栏文章

[USACO24OPEN] Cowreography G

P10280题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mio7hkrw
此快照首次捕获于
2025/12/02 14:37
3 个月前
此快照最后确认于
2025/12/02 14:37
3 个月前
查看原文

前言

非常好,肥肠有意思的神秘贪心题!!!

题目分析

我们假设两个字符串分别是 a,ba,b
我们把点分成 33 类:对于 ii,如果 ai=0,bi=1a_i=\texttt{0},b_i=\texttt{1},这是第 11 类点;如果 ai=1,bi=0a_i=\texttt{1},b_i=\texttt{0},这是第 00 类点;其他点是 22 类点。
我们需要把一个 00 类点和一个 11 类点匹配,使得步数最小。对于 22 类点,显然不动最优。
考虑两个点分别为 i,j(i<j)i,j(i<j),两者是不同类型的非 22 类点。通过交换把他们换成 22 类点的步数是 jik\lceil\frac{j-i}{k}\rceil(每次只能换 kk,所以现需要这么多步)。
对于 0a,b1,ab0\le a,b\le 1,a\ne ba,ba,b,假设当前有 xxaa 类点没有匹配,遇到了一个 bb 类点。如果不考虑向上取整那选哪一个 aa 类点答案都一样,因为之后(包括当前)的 xxbb 类点都会和 aa 匹配,顺序和答案无关,答案是这些 bb 的下标和减去 aa 的下标和。而且同时此时不选取前面的 aa 类点一定不优,因为会多算两次这个点和后面一个 aa 类点之间的距离。
由于有向上取整,我们尽量选取这些 aa 中差是 kk 倍数的,如果没有的话选择的余数最大的,因为我们希望浪费的步数尽量小。
为什么加入向上取整之后不会影响一开始的策略?违反一开始的策略至少会多走 22,而这里的取整影响一定更少。
可以使用 set 维护这里的点。
时间复杂度 O(nlogn)O(n\log n)

评论

1 条评论,欢迎与作者交流。

正在加载评论...