2023.6.6训练日志

Cats Transport

斜率优化例题

\(dp_{i, j}\) 表示第 \(i\) 个饲养员走完后能接到 \(j\) 只猫

\[\begin{align} dp_{i, j} &= \min \left( dp_{i - 1, k} + \sum\limits_{l = k}^j(a_l - a_k) \right) \quad 0 \le k \le j - 1 \\ dp_{i, j} &= \min \left( dp_{i - 1, k} + \left( j - k \right) \cdot a_j - \left( sum_j - sum_k \right) \right) \\ dp_{i, j} &= \min \left( dp_{i - 1, k} + j \cdot a_j - k \cdot a_j - sum_j + sum_k \right) \\ dp_{i - 1, k} + sum_k &= a_j \cdot k + dp_{i, j} + sum_j - j \cdot a_j \end{align} \]

对于变形后的方程,取

\[\begin{cases} x = dp_{i - 1, k} + sum_k \\ y = k \\ k = a_j \\ b = dp_{i, j} + sum_j - j \cdot a_j \end{cases} \]

直接斜率优化即可

Select Three Sticks

简单排序题,在三个数中取中位数即可

Bright, Nice, Brilliant

找规律题,在三角形的两侧输出 1,其余位置输出 0 即可

Removing Smallest Multiples

这题特别有意思。赛时打了个 \(n \sqrt{n}\) 的做法,不出意料 TLE 了,想了一整场比赛都没想出正解,结果比赛结束前 1 分钟加了个火车头居然过了

正解是从小到大枚举 \(k\) 的值,从而得出每个数被删掉的最小 \(k\) 值。复杂度 \(\frac{n}{1} + \frac{n}{2} + \cdots + \frac{n}{n} = n \log{n}\)

附:火车头

点击查看代码
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

Slime Escape

很巧妙的贪心题,每一步决策考虑向左或向右走,取能取到的最大值。如果陷入了不能进行决策的状态,说明不能满足题目要求

Rectangular Congruence

首先关注到第二个要求是解题关键,将原来的式子移项可得以下结果

\[a_{r1, c1} + a_{r2, c2} \not\equiv a_{r1, c2} + a_{r2, c1} \\ a_{r1, c1} - a_{r2, c1} \not\equiv a_{r1, c2} - a_{r2, c2} \]

因此考虑先让 \(a_{i, j} = i \cdot j \mod n\),又由于给满足题意的一个矩阵 \(a\) 的任意一行或一列加上或减去同一个数可以使该矩阵仍然满足题意,利用这一性质使矩阵满足条件 3 即可

posted @ 2023-06-07 21:14  xj22yangyichen  阅读(21)  评论(0)    收藏  举报