[考试]20150808

1、前言

       好久没有写考试总结了,因为没怎么考试(好废话的感觉)。今天考的稀下的,还是因为考试的时候状态不好,一些很傻逼的方法想不出来,反而去写还不熟练的什么鬼平衡树了。看了题解之后确实觉得没有什么很难的知识点,都是基础。所以以后还要加强一些基础方面的东西。

 

2、Toy 玩玩具

大概题意:一条带权值的链,现已知每次插入的位置以及其权值,求最终链的状态。

       一开始就想着写Splay,的确可行,但是还不够理解,所以半天没有完全写出来。确实这道题不需要用到Splay,如题解所言:

     “因为已经提醒过考试范围没有超过 NOIP,所以标程算法并不是平衡树。虽然实际情况是按时间顺序向长链中插入元素,但是随着元素的插入,链也不断发生着变化,这样除了模拟之外没有其他很好的算法。所以,我们不妨用逆向思维去思考这个问题。 如果是逆着插入点,首先,对于每一个元素 i,在它之前必有 k[i]-1 个空元素(也就是在它之 前插入的未知元素),而且对于最后插入的那个元素 n,它的最终位置必为 k[n]+1,并且不会再发生移动。 再来考虑插入的第 n-1 个元素, ① 如果 k[n-1]<k[n],那么第 n 个元素的插入不会影响到它的最终位置,所以它的最终位 置为 k[n-1]+1,满足它之前有 k[n-1]-1 个空元素。 ② 如果 k[n-1]>=k[n],如果它仍然要插在 k[n-1]+1 的位置,那么第 n 个元素的插入使它 之前的空元素个数为 k[n-1]-2,小于 k[n-1]-1。这样会导致在它之前插入的点的个数大 于所能提供的位置数,则它必须插在之前有k[n-1]-1个空元素的位置,也就是k[n-1]+2。 然后对于这之前的每一个元素 i,都必须插在之前有 k[i]-1 个空元素的位置(当然那个位置 也要为空) ,所以只要从头开始数,数到有 k[i]个空元素的位置,将其插入。 朴素算法是 n^2 的,所以可以用树状数组维护,线段树也可以。”

 

3、Guinness 吉尼斯纪录

大概题意:存在一个单调递增数列,现在对他进行一组一组的元素添加,每一组也是单调递增数列,使添加之后的主数列依旧是单调递增,求每次添加时每个元素的位置。

       又是一道什么鬼链表,今天的画风好像有问题噢,但是如果你打暴力的话才会真正涉及到链表。这道题正解是归并排序,如果直接将插入的分队伍加到主队伍后,然后进行排序统计插入位置,时间复杂度是O(nm log m)的,会导致超时。于是可以用归并排序降到O(nm),其实题目中的提示已经很明显了,分队中的身高都是递增的。

 

4、Fruit 水果

大概题意:现有一棵树,每天可以进行多次操作,每次操作可以删除一个节点,同时该节点所在链的所有节点在当天不能再进行操作。问最多可以操作多少天。

       水的不能再水啦!但是我考试的时候因为题目思路和习惯问题,先看了T1/T2,然后看了T4,就是没有看T3,然而T3是最水最水最水的题目了,只要自己多试几个数据就马上可以发现规律了——树的最大深度为所求,这还不简单?

 

5、Quantum 量子态

大概题意:给出一些系列操作,操作包含修改为0,修改为1,取反和无操作(都是对于某一位),这些系列操作都有代价。再给出一些0-1字符串初形态和终形态,要求根据那些系列操作在最小代价的情况下进行字符串转换。

       也是简单题,我做了,但是被卡了常数,这也是我第一次被卡常数的情况,这也是写状压的时候要注意的地方,以前是真心不会。对于每一行的状态压缩转移,我们应该使用位运算符来把50这么大的常数给省去,要知道计算机的位运算是很快的,思路要清晰。直接BFS/DFS就行了,但是要进行剪枝(其实就是记忆化搜索了,也就是动态规划了),或者单调队列优化(这道题实在没有必要)。

posted @ 2015-08-08 22:35  jinkun113  阅读(188)  评论(0编辑  收藏  举报