#2018.05.30来自一只沙茶的集训阶段性总结

在集训第六天的时候小小地总结过了一下,于是今天不再赘述啦。

然后开始赘述。
============================比较喜欢的动态规划=================================

动态规划是个好东西啊。尽管老师所讲仅是动态规划最基础最基础最入门最入门难度的东西,but在短时间内理解它,也让我有点费劲。动态规划在我看来就是针对那些求最优问题的应对解法,动规没有很明确的模板,但为了便于学习可以分成很多类,最开始学习的是线性dp,求最长上升子序列,求最长下降子序列等等。而导弹拦截一题,统计中唯一一个8ms过的就是我。。。
然后学习的是资源分配类,老师没有细讲(或许是我没认真听),然后我也没有理解何为资源分配类,个人感觉在机器分配前的尼克的任务更像资源分配。比较头疼的是课本上所说的“如果能理解,我们将深刻理解。。。”诸如这样的句子我都是无法深刻理解的 (沙茶),然后没头没脑地学习下面的知识。
接下来时我们和蔼可亲的背包问题,九讲背包合成了一个下午,背包问题其实也能算资源分配,不得不说在理解二维优化成一维的时候,在理解老师Excel时是比较懵的。强行继续向下学习,各种问题的本质都是0/1背包。而我对0/1背包的理解是,0指不选这件物品 1指加上这件物品,/即是或,即是选择,只是在选择的时候不同的问题有着不同的约束条件。

对于背包模型的意义拓展我觉得还有必要花大量时间去深刻理解,最好是在暑假时期自己能够解决。
双进程类动规其实只是换一种思路去思考问题,算是dp基础的一种拓展吧。

接下来的区间动规,我个人认为就算比较特殊了,因为之前的动态规划状态基本是寻找到某个i或前某个i的最优值,而区间dp则是从某个i到某个j的最优值。对于这类问题处理的思想其实并没有很大的变化,只是核心代码的实现上,对于范围最优值的寻找不能很快理解。
二维动规???多刷题,多刷题,从线性动规到平面动规,嗯,需要投入更多时间训练思维而已。

(假装dp到这就差不多可以结束了)前天虚神给我们讲了状压dp,于是基础知识还包含了位运算。由于不能灵活使用位运算导致状压听得云里雾里。先补补位运算可能来得更有效吧。
==============================讨厌的图论!!!!================================

开飞机的那几天把图论过了两天,然后在集训的时候,福州大佬动不动就能扯到最短路,我真的是,貌似图论的重要性在比赛中和dp相当,这个点线之间传来传去跑来跑去,我觉得难点主要实在代码的实现上。
据说很多大佬们都是把模板啊和一些算法写在博客上并附上图和代码来充实自己的博客,而像我 (很懒的)这种就只会往下写,想到什么写什么。涉及到图的算法并不少,照着书能勉强做题,离开书本能很勉强地做模板,真的是非常的勉强。
不再写下图论的知识和算法在博客上了,待我深刻理解书上的代码再写关于它的总结吧。

============================丑陋的数论!!丑陋!!!!=============================
我从小 (学)数学就渣得不行。
然后老师就给我们补基本数论了????数论不是数学竞赛搞的吗,,搞数学竞赛不都是疯子吗??????然后书上说,数学和计算机程序设计是密不可分的 (那我怕不是得早点退水)
“计算机程序设计很美(没毛病),数学也很美(????),我们不用把这些公式当作负担(嗯。。),他是帮助我们的朋友(嗯????!!),我们应该感叹他们的高效和实用(。。。)。”

数论的一些知识还没有掌握完全,更别说在题目中实现了,光是证明那些奇怪的人造出的奇怪的定理公式就已经够心累的了。

不过比较安慰的是花了大量时间去看扩欧,还算有所成(假装写了两页的笔记就熟练掌握了这个知识)。

=============================高~级数据结构======================================
都是一坨坨优~秀~的数据结构。

本来下面的内容都已经写好了,以为这自动存档很快的结果只给我存到这里,然后这电脑一卡全没了于是我又开始重写。
我现在想去死,我尽量用平和的口吻写完它然后把它拍死。
然而我的基本数据结构还不能过关(啪啪打脸)
主要是树这个神奇的数据结构。学习了树的Dfs,具体的我们讲了线段树以及树状数组。

线段树是个非常非常优秀的数据结构,它的功能非常的丰富,包括区间修改,区间累加和,区间最值,全局第某大,还有很多很多高端的操作。然而线段树能力强,实现确实个大麻烦。上次偶然听见老查说自己的树种到500行又死了。。。重点不是500而是。。。又。。

在佩服老查代码力如此之强的同时也意识到线段树的操作实现非常的复杂且耗时。由于自己的代码力实在太弱,这里配上图//
建树 然后是单点修改 然后是区间查询 然后,,,是区间修改
线段树确乎是十分复杂的一个东西。于是有了树状数组,它的实现更为简单而且包含了部分线段树能够支持的操作,深刻学习树状数组我用到了下面的博客。

https://blog.csdn.net/int64ago/article/details/7429868(打call!!这份博客可以很好地解答课上遇到的问题)

对于树状数组的一些操作,尤其是对lowbit为何凑效非常不理解,上述博客能够作出不错的解答。


然后是左偏树,向左偏的树,其实是一个可并堆,它算是堆的一种提升,效果更佳。合并操作是左偏树特有的,其复杂度非常优秀 达到了O(logN)而由于它有着堆的特性,插入与删除也只需要O(logN),查询需要O(1) ,关于优先队列有一张很棒的图,附上。
那么下一个部分
===============================字符串的一些操作=============================

在入门篇学习字符串的时候,一直认为字符串只是在输入输出时在一定条件下能够得到便利,然后由福建大佬讲课后才能发现
字符串其实在noip中也常考到。

主要是trie树,kmp和ac自动机。
首先说说kmp算法吧,这里也附上一篇 良心博客
kmp可以做到在线性的时间内判定字符串A是否为字符串B的子串,并可以顺带求出字符串A在B中每一次出现的位置。非常高效
再附上我的代码(表示这次我终于能偶脱离课本自己敲模板了)
#include<bits/stdc++.h>
using namespace std;
const int maax=1200000;
char A[maax],B[maax];
int next[maax]={},f[maax]={};
int result=0;
int lenb,lena;
void next_KMP()
{
	next[0]=-1;
	for(int i=1,j=-1;i<lenb;++i)
	{
		while(j>-1&&B[i]!=B[j+1]) j=next[j];
		if(B[i]==B[j+1]) j++;
		next[i]=j;
	}
}

void f_KMP()
{
	for(int i=0,j=-1;i<lena;++i)
	{
		while(j>-1&&(j==lenb||A[i]!=B[j+1])) j=next[j];
		if(A[i]==B[j+1]) j++;
		f[i]=j;
		if(f[i]==lenb-1)
		{
			result++;
			j=next[j];
		}
	}
}

int main()
{
	scanf("%s",A);
	scanf("%s",B);
	lena=strlen(A);
	lenb=strlen(B);
	next_KMP();
	f_KMP();
	cout<<result;
	return 0;
}//开字符数组会比直接使用字符串的操作用时更短  


给一个单词,然后给你一个字符串,问你这个单词是否在这个字符串中出现过,或是让你求出出现的位置和次数,这个问题可以用kmp算法在比较高效地完成这个任务。那么给出很多个单词,然后给你一段字符串,问你有多少个单词在这个字符串中出现过,用每一个单词对字符串做kmp,时间复杂度的高度肯定不是我们能够接受的,当单词的个数比较多,并且字符串很长的情况下不能有效的解决这个问题,所以这时候就要用到一个神奇的叫做ac自动机的算法。
关于 AC自动机,这是我看了以后蛮不错的一篇博客,讲得比较细致且易理解。
ac自动机在我看来是目前对代码力的要求最高的,尤其是失配指针的运用在ac自动机中的贯穿。
至于trei树,我基本上是完全没听懂,福建大佬在授课时比较羞涩,口胡(糊)效果极佳,以至于上课气氛尴尬得呼吸困难。。

================说实话,这几篇找来的博客完全可以合成为这几天学习的教材=====================

================================杂谈=======================================
哎,冷静了一会儿再重新写完这些被删除掉的内容,写出来给我的感觉果然没什么价值,远不如之前写的东西了,,
其实这一部分就是谈谈心得,最近以来除了对知识理解外其他的一些想法。

作为这个集体里为数不多的沙茶,随着时间的流逝,看到本和我同时起步的延恺和老爹都学在我前面,我确乎是把自己看得越来越低了,怎么说,毕竟从初中开始就一直靠文科提升成绩,一个理科绝不能称作优秀的普通学生。可能也是想突破一下自己吧?但是,仅是突破一下自己吗?教练的精力是有限的,更何况是两个金牌教练,给了学信奥的这么好的资源这么好的平台,而我只是想突破一下自己的常规,这难道不是很自私吗,成绩不高总会自认为有愧于老师的期望。自己不是一个能够冲省队拿金牌的料子,能在浙江省拿省一对我来说已经完全足够了。但这肯定不是老师想要的学生。我觉得上次岳老师讲的很有道理,我们坐在这里,目标至少得定在省一,我们多数人都是要去冲省队的。至少,省一有个自主招生的资格,然而自主招生对理科的要求更为严苛,拿到所谓的资格,考不考得了完全是未知数。这几天的集训不仅仅是知识的提升,更重要的是我更了解了信奥的存在于我是何物。我选择在这里留下而不是在下面的教室学习高中的课程,我应该了解了为什么?我肯定是以高考为最终目标的人,理科的空缺我必须在平时花大量时间去填补。接下来的一年时间,信奥也要同时兼顾,是最苦最累的时候。那么,高效就成为了最最珍贵的东西,想来,我必须珍惜的应该是学习信奥的这个过程。这个过程,在城外的我已看到了那满城风雨,我不知道城里有多少人撞破脑袋地想要登上最高的城楼,我只知道,我要进去看一看,去踩城里的街道,去躲溅起的泥淖,去望城楼的明亮,去尝试,去靠近。
如同这篇博客,可能会有很多意外,但要坦然接受,乐观面对。

尽吾志也而不能至者,可以无悔矣。

================================End=========================================

猜你喜欢

转载自blog.csdn.net/whs_2021/article/details/80504797
今日推荐