2019.11.02【NOIP提高组】模拟 A 组 总结
考场:\(20 + 30 + 0 = 50\)
爆炸了。。。
T1:
这。。。看了一眼,是原题(假的),数据范围翻了一倍。
我当时还傻傻地就用原来的方法做了,而且还把时间翻了倍(代码放错了位置)
导致\(TLE60\)--->\(TLE20\)
额。
正解就是加个线段树维护一下,运用田忌赛马的思想来在\(logn\)的时间内计算出答案来。
T2:
看了题以后,感觉有点点熟悉,于是想办法搞出来。
想到了枚举一个分界点,然后对于左边的就顺序,右边的就逆序。
发现好像可行,打完样例过了,对拍后发现有种情况不可以:
8
8 7 1 3 5 4 2 6
结果就萎了,呵呵。
正解是贪心,我们可以从小到大枚举,并贪心选择移到最左还是最右。
因为有相同的情况,所以不得不考虑特殊情况特殊对待。
对于相同的,可以先求出向左移和向右移次数,用树状数组来维护。
如果是向右移,那么右边的值相等的一定已经向右移了,所以可以排除掉。
然后还有一点,就是对于那些排除掉后移动个数相等的,一定要先移动了离移动方向最近的,再依次移动。
举个例子:
11
10 5 11 10 2 7 7 8 1 7 11
----------------- ↑ ↑ --------
移动次数:-----3 3--------
所以还要在排序时判断一下如果相等的话先移动离移动方向更近的那个点。
咳咳,总之这个方法有点麻烦,不如人家的好。
T3:
第一眼,神仙题一道。
第二眼,两两区间不相交?好像可做。
于是对于包含的,构造了一棵树。
于是就不知道怎么做了,正好也没时间了。
正解就是对于构造了一个树之后进行\(DP\)操作,用差分表优化。
DP的话就是设\(f[i][j]\)表示当前第\(i\)个节点所覆盖区间中最多覆盖了\(j\)层的最大美观程度。
这样我们可以暴力\(O(n^2)\)的时间来完成。
然后考虑优化,我们发现,对于每个覆盖区间,一定是先选最优的再选次优的,所以我们可以做一个差分表,
然后用动态开点的堆来维护一下即可。(具体暂时不知如何)
总结:
要看清楚数据范围,别异想天开了。
对于每道题都要用心去做,不要做完一道就半途而废了。
要利用好时间,别到了最后没时间就\(GG\)了。