2020.3.21考试总结
\(T1\) \(gcd\)
看到数据范围:高精度?有点恶心。先打了个60分的辗转相除的做法。
然后想了想,想起一道原来在\(noi.ac\)上做过的题目,在输入时进行处理,但仔细想了一下还是不行。果断跳过。
\(T2\) \(seat\)
看到题目,感觉有点熟悉?认真看了看题,想到一个贪心做法:
先考虑前门。对于每前门的个人可选的区域一定是一个”三角形“。
不难发现选取的位置在”三角形“中距离后门最远的点时,后门的人得到的选择空间最大,方案最优。
但是,如果忍耐值大的人选择了极靠近前门的位置,导致忍耐值小的人无位置可选,那也是不可行的。
所以,将前门的人的忍耐值从小到大排序,先让忍耐值小的人选,就能避免上述情况。
接下来考虑后门,由于前门的人已选好,所以直接选离他最远且未被选过的位置即可。
可以贪心地按忍耐值从小到大排序。如果当前人的“三角形”内已无空位则无法满足,输出\(NO\),如果全部有位,则输出\(YES\)。
上述算法时间复杂度为\(O(n^2)\),能拿六十分。拿到后直接看\(T3\)了。当时有了点堆优化的想法。
看完\(T3\)又回来看\(T2\)。
想到,对于前门的人,坐的位置既要离前门尽量远,又要离后门尽量远,即要保证前门合法的情况下,使后门情况更优。
忍耐值从小到大考虑前门的人。如果已经无位置,就输出"NO",反之,取离前门尽量远的位置,将那些位置离后门的距离放入小根堆。
后门的人就忍耐值从小到大取小根堆堆顶,那占的位置最优。
上述堆优化做法复杂度\(O(nlogn)\),应该能得满分,自测了一下发现没问题。不知为何只有\(30pts\)。
\(T3\) \(qt\)
看到题后,我发现暴力\(24\)分,而且码量可能稍大。
当时\(T2\)有了堆优化的思路,能多得\(40\)分,码量还不大。
于是果断弃疗。
最后,\(T2\)也只有\(30pts\),与其这样,还不如先写了\(T3\)暴力呢。
看来,时间没有分配好,自己也有点好高骛远,以为能切\(T2\)。

浙公网安备 33010602011771号