ZJOI2017第一轮:2017.3.21---3.23
温州中学
//http://www.cnblogs.com/ARZhu-NOIpAK/p/6596879.html
//http://www.cnblogs.com/ARZhu-NOIpAK/p/6601676.html
//上面是学长的博客
Day0
有好多天没做作业了,感觉不错。
温州还是不错的,宾馆也很满意。
感觉明天会听不懂。
Day1
第一节课的前半部分还能勉强听懂,后面和下午一脸懵逼。
第一节课是由XJ中学的周子鑫学长上谈谈搜索题,下面是一点总结。
搜索算法是利用计算机的高性能来有目的的穷举一个问题解空 间的部分或所有的可能情况,
从而求出问题的解的一种方法。现阶 段一般有枚举算法、深度优先搜索、广度优先搜索、A* 算法、
回溯算法、蒙特卡洛树搜索、散列函数等算法。
在大规模实验环境中, 通常通过在搜索前,根据条件降低搜索规模;根据问题的约束条件 进行剪枝;
利用搜索过程中的中间解,避免重复计算这几种方法进 行优化。
part 1:折半搜索
比如说双向广搜之类的,主要是从起点和终点交替搜或者是同时搜,可以降低搜索复杂度。
如果答案容易合并,或者搜索的操作可逆,可以考虑折半搜索。
还有一个技巧,要算方案数时,将折半的两边都存入hash数组,有重叠则答案+1。
part 2:
启发式搜索
A*:BFS的启法式版本;
IDA*:前者的迭代加深版本
A* 的主要思想是通过估价函数来调整搜索顺序从而优化复杂度,比如说:先搜分支少的。
IDA*则是通过估价函数来最优性剪枝
part 3:
Dancing links(舞蹈链)
主要是这几句:
L[R[x]]← L[x]
R[L[x]]← R[x] (删除)
现在如果要撤消这个删除操作呢?
L[R[x]]← x
R[L[x]]← x
为什么要在把一个结点删除掉以后再把它放进来呢? 一个典型的应用是在 DFS 的时候,还原之前的链表状态
这个东西看上去不怎么奇妙,但可以大大优化精度覆盖等覆盖问题的X算法。
后面就讲了好多典型的搜索题,然而没多少听懂。
第二节课是STL的正确姿势,很多函数都很陌生,感觉自己现在用不到?
这里列几个函数,以后可能用的上:unique nth_element binary_search rope equal_range
priority_queue<int,vector<int> ,greater<int> >Q(大根堆转小根堆)
第一天的最后一节课讲了一些题目,反正我一道也没明白,这里就不讲了。
Day2
还是讲题,听不懂ing……
学了一个SG函数:
在一个DAG中,从起点开始,每人移动一步,一方不能走了则输;
SG[i]= mex{SG[x]} //x为i能到达的点
(mex表示在集合中未出现的最小自然数 mex{1,2}=0)
如果有两张图同时可以选,答案则为两张DAG的值异或一下
直接跳过。
Day3
考试+爆0。 (爆0很有意思的呀)
花了一半的时间敲第一题,最后才发现写错了,一紧张,20分的链状本来很稳的,手算把规律算错了完美0分。第二题是一道概率题,我一道这样的题都没碰过,暴力又太难写了,果断放弃。(喂,喂,明明题目看了很久的)第三题打了个不能再暴力的暴力,n^m的复杂度(真佩服我自己的智商),考场上差点连KMP都忘了。
总结:
毕竟是第一次参加省选,爆0也是正常的(这个借口不错)。说明自己的水平是非常非常不够的,以后还要更加努力,数学和科学也要更加突出,早日考上满意的高中。
天赋决定上限,努力决定下限。------maximum