离线赛20171010总结

来源:互联网 发布:软件定义世界 sdx 编辑:程序博客网 时间:2024/06/15 13:02

1.总结

昨天的考试并不是很难,并且第二道题目之前做过一道类似的题目,那就是完美队形。所以说第二题其实比较简单。主要是第三题。一开始看到第三题,就只打了一个暴力,后来就没有继续写了。虽然只拿了50分,但是该拿到的都拿到了。发挥得还是比较稳的。

2.题目分析:

1.字符连通块

这题目是连通块的一个升级。暴力的话有70分。观察数据,这应该是O(n^2)才能过的。我就在想改变一个点的状态的时候,四边的点都求了。这旁边的连通块其实被重复算了好几次。那只要利用染色的思想,把旁边的连通块染成同一种颜色。再记录他们的次数。当然,需要注意的是,颜色可能会相同,需要判断一下。比较蠢的方法就是把每次出现的颜色标记一下。但是显然太浪费了,一个十万的数组每次只存4个,并且还要memset,铁定超时。

2.回文字符序列

这个其实跟完美队形非常像,但是完美队形求的是最长长度,这个求的是方案数。那么就稍微改进一下。主要的dp枚举的是中心的点,从后面往前面扫过来的时候,就把dp的总和求起来。遇到相等的情况,就把总和加给它。最后算出总值。

3.删边最小生成树

这个题目就比较有意思了。它求得就是次小生成树。

一开始就能比较自然地想到要先构造一个最小生成树。但是后面如何操作,一开始我就是中了题目的圈套,按照它的思路去删掉一条边,然后去找最适合的一条边去连通两个被分开的子树。但是,这样如何快速求出连接两个分开的子树的最小边,没有固定的复杂度,且很容易被卡。最差当无法构造的话就要把所有的边都遍历一遍。

记得小C之前讲过离线会比在线好。如果这题先想到离线的话,那就会比较好做。同时在这个时候,应该有一个逆向思维。如果删掉一个边排序无法满足要求的话,那我只要先排序,加入一条边,在这个环上的所有边都可以替换。

当然,这样每次加入一条边,一共有100000个,如果故意卡你的话,你也做不出来。如果一个边已经在之前删掉过得话,那么后面肯定没有用了,就不会再出现。那么这个时候就要用到路径压缩,也就是并查集。用它来把路径合并。这样的话最多只会遍历到n的点。

3.反思

这次因为该打暴力的都打了,一个一个过来,保证都对拍过了,才考的还可以。当然,中间检查的时候发现,暴力对拍拍不出数组大小。一开始开的是暴力的大小,正解忘改过来了,差点就少了不少分。

原创粉丝点击