tg 72 solution

tg 72 solution

T1

T1,DP估计所有人都可以推出来

但是,推出来的和值域有关吧?

我就知道死在这里的不止我一个

发现,由于这个\(x=\leftarrow \lfloor\frac{x}{2}\rfloor\) 的操作

事实上,可以用到的状态数\(O(n\log x)\)

证明考虑可达到的数范围关于操作1次数的变化

于是把DP改成记搜/DPstd::map<>就可以过了

注意,如果记搜\(90\space pts\),考虑

\(1.\)放弃std::map/unordered_map<>手写哈希表

\(2.\)放弃记搜,改用DP+std::unordered_map<>加上滚动

3.放弃改形式,特判过

看到题解按着暴力思路定义然后用

T2

做这个题,你需要知道:

首先,看好返回的先后顺序,因为这个东西,我改题异常艰难

其次,会做交互题

有关约数这种东西,首先想到

\(\sigma(n)\leq n\)

(还有就是,这个函数上界\(\sqrt{n}\),很松)

于是我们发现,分解成\(n\)\(1\)才是最优方案

因为\(\sigma(1)=1,\forall x.\sigma(x)\leq x=x*\sigma(1)\)

所以上述方案一定不劣

考虑最小值

首先需要知道哥德巴赫猜想

(这个没有证明,但是现在计算机已经通过验证表明这个范围的数满足哥猜成立)

通过形式\(1\)我们知道最优答案上界是\(5\)

通过形式\(2\)我们可以给出\(3/4\)的偶数构造

然后选择大力分讨,记\(prime\)为素数集合

\(1.n=1\or n\in prime\)

这个时候不用分拆

\(2.2|n\)

首先,我们看\(n-1\)

如果\(n-1\in prime,\)使用\(\{1,n-1\}\)即可构造最优解,为\(3\)

否则,通过\(1+1\)的形式,我们可以构造出一个\(4\)的最优解

事实上似乎较小的那个质数非常小,枚举到\(1e3\)左右即可找到合法解

\(3.2\not | n\)

我们可以通过\(1+2\)构造一个\(5\)的解

但是这个解可能不够优,

我们考虑不做拆分的情况即可

构造考虑先减掉一个\(1\)

然后奇数的情况就转换成偶数的情况了

然后按照继续分类讨论就结束了

似乎我原来的构造方式有问题就扔掉了

T3

T4

复述题解时间

\(k\to k+1\)的最优集合转变,必然是这样的:
\(1.\)新开一段
\(2.\)延长一段的两端

证明考虑KM算法证明过程
由于本人不会KM所以请看题解

image

于是我们维护这个贪心需要的东西

第一个是std::set<>维护连续段,第二个std::priority_queue<>维护最优决策

显然两个时间复杂度都是\(O(n\log n)\)

posted @ 2022-10-22 17:55  2K22  阅读(25)  评论(0)    收藏  举报