赛时
对于 T1,看懂题面以后感觉很可做。
首先明确正解复杂度应该是基于 \(N\) 额度线性做法。
把输入按照开始时间排序,然后依次处理。
赛时考虑到一个元素在覆盖过程中遇到其他元素时无法确定时间先后,确定后想要找到该元素的当前位置和重新覆盖有些困难,写了 1h 以后先放弃了。
舍远求近,基于时间写了一个 \(\mathcal{O}(nk)\) 的做法,发现时间很大,用 20min 对时间进行离散化,跑过了小样例。
先不管 T1,去看 T2。
T2 的话可以根据正负性列方程搜索求解,复杂度 \(\mathcal{O}(2^n)\)。
想了一会发现并不是太会低复杂度做法,先去看后面的题。
T3 和 T4 一开始的时候都不太会暴力做法,这时候我面临去改 T1 还是继续拿暴力分的选择。
上个厕所回来回了 T3 和 T4 的暴力做法。
T3 的话为了在遍历的时候复杂度低于 \(n^2\) 做到 \(nlogn\) 使用了 set
,赛后发现 T 了导致爆蛋。
T4 的话使用 Floyd 硬搞,复杂度 \(n^5\),一遍就过掉了样例。
时间还剩下 1h,看别人都过掉了 T1,便回去改 T1。
想到了一个利用优先队列找时间节点的方法,代码很长,用 30min 写了一个将近 200 行的代码,剩下的时间都在挑,结果到最后也没有调出来。
赛后
班里的分数差距主要在于 T1。
如果当时没有去写暴力分并且 A 掉 T1 的话,我将以 110 分的成绩挤进首页。
但是 T3 暴力写挂了,T1 只拿了 50 分。
想想看来 T1 其实很简单,赛时没有考虑到按照时间排序以后其实可以直接大胆覆盖,不会出现占用状况。
正解其实很短,可以做一个多源 bfs 最短路。
T3 的话主要是 set
浪费了时间,赛时其实使用 vector
的话也可以做到低于 \(n^2\)。这个不难想,但是赛时没有想出来。
打的不太好,差距主要还是在 T1。