2024 ICPC 昆明邀请赛
Problems | AC |
---|---|
A. Two-star Contest | ○ |
B. Gold Medal | ○ |
C. Stop the Castle 2 | |
D. Generated String | |
E. Relearn through Review | ⊕ |
F. Collect the Coins | 待补 |
G. Be Positive | ○ |
H. Subarray | |
I. Left Shifting 2 | ○ |
J. The Quest for El Dorado | ⊕ |
K. Permutation | |
L. Trails | ⊕ |
M. Italian Cuisine | 待补 |
E gcd 的性质
给定一个长为 n 的数列 a[n], 和一个非负整数 k。
可以至多一次 选择数列的一个区间 +k
求最大化的序列 gcd 和
赛时盯着这道题盯了一个小时然后写了个假算法
赛时想到了 gcd 是单调不增的,也想到了 gcd 最多会减少 logX 次
一段数同时加上 k 以后,gcd 和他们的差有关
明明都知道了这三个关键的性质,还是没得出正解。
假如把整个序列写成一个柿子,答案就非常明了了
$ \gcd(a[1]…a[n]) = $
$\gcd(\gcd(a[1]…a[l - 1]), \gcd(\left|a[l] - a[l + 1]\right|
…\left|a[r - 1] - a[r]\right|), a[r] + k, \gcd(a[r + 1]…a[n])) $
假如 r 确定,则后两项都确定了。至于前两项,都只和原数组有关。
至于原数组,结合 gcd 前缀只有 logX 个的性质,本质不同的只有 logX 个,枚举 logX 个分界点即可
note:注意 ans 的初值
1 | void solve() { |
J 最短路 RMQ
给一张无向图,每条边有长度和颜色。从节点 $1$ 开始一共要走 $k$ 轮,每一轮可以一次性走完颜色均为 $a_i$ 且总长不超过 $b_i$ 的边。问 $k$ 轮走完以后能走到哪些点。
$n, m, k \le 5 \times 10^5$
以走到了第 r 轮为第一关键字,这一轮走了距离 d 为第二关键字,作为最短路的距离。
当拓展一条边 (c, len) 时如果 $c = a_r$ 且 $d + len \le b_r$,则可以直接转移。
否则需要在 $[r + 1, k]$ 中找一个颜色为 $c$ 的且 $b_nr \ge len$ 的最早的一个 $nr$ 转移过去。
每个颜色开个 rmq,在 rmq 上二分即可。
复杂度 $O(m (\log{m} + \log{k}) + k \log k)$
1 | void solve() { |
L LIS
二维平面每个整点 $(x, y)$ 都有连向 $(x + 1, y)$ 和 $(x, y + 1)$ 的两条无向路径。另外还有 $n$ 条特殊的无向路径连接 $(x_i, y_i)$ 和 $(x_i + 1, y_i + 1)$。
设 $f(x, y)$ 表示从 $(0, 0)$ 走到 $(x, y)$ 需要的最少路径数。给 $p$ 和 $q$,求 $\sum_{x = 0}^p\sum_{y=0}^{q}f(x,y)$
多组数据,$n \le 10^6$,$p, q \le 10^6$。
假如没有额外路径的话,$f(x, y) = x + y$
那么考虑上额外小径就是减去最多经过的额外小径数量
从贡献角度考虑,一个斜线 (x0, y0) -> (x0 + 1, y0 + 1) 会让 f(x > x0, y > y0) 这个矩形 -1。因此可以把所有斜线按 $x_i$ 为第一关键字升序,$y_i$ 为第二关键字降序排列。
这样走到 (x, y) 最多经过的斜线数量就等价于一个最长上升子序列的长度。
1 | void solve() { |
2024 ICPC 昆明邀请赛