1.前言
今天是在这里集训的最后一天,接下来也马上要开学了,不知不觉在这一小隅地方呆了近一个月,感触还是颇深的,每天做题,看着A题榜上的变动,还是有一些压力的,总结一下这近一个月来的收获。提早一个月来到学校这是我自己的选择,为了提高自己,既然选择了这条路就要走下去,虽然觉得自己的进度比不上人家,但好像确实是以一种自己的速度在成长,这个暑假重新回顾了搜索、dp、图论,学了单调队列,树状数组。虽然树状数组只掌握了基本的运用,还不是很到家。
2.搜索、dp、图论
这些是上学期学的东西了,一开始的第一个专题开放的时候,说实话有一段时间没碰代码还是会手生的,更别说上个学期没怎么学扎实的图论了,感觉又重新学了一遍图论,图论这一章是上学期最后所学的内容,将图与定义相结合,图论的内容就不会变得那么抽象,graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。
图也有遍历,并且可用广度优先搜索和深度优先搜索,从图中某一顶点出发系统地访问图中所有顶点,使每个顶点恰好被访问一次,这种运算操作被称为图的遍历。为了避免重复访问某个顶点,可以设一个标志数组visited[i],未访问时值为false,访问一次后就改为true。图论有很多算法,弗洛伊德算法是最基础的用三个循环n3找到两点之间的最短距离,算法非常简单,但是在实际运用上容易超时,所以还有dijstra算法,prime算法,这些算法经过一个专题的练习已经有些熟练了,比如计算最短生成树的方法也熟稔于心。
3.树状数组
这个专题入门很快,就是学会lowbit(int x),sum(int x),add(x,v)就行,但是遇到题目能不能想到用树状数组比较难。树状数组做了几个比较模板的题目,就是关于排兵布阵的各种变形,比如二维排兵布阵,还有维护区间的值。
int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int res=0;
while(x>1000)
{
res+=c[x];
x-=lowbit(x);
}
return res;
}
int add(int x,int v)
{
while(x<MAXN)
{
c[x]+=v;
x+=lowbit(x);
}
}
4.单调队列
单调队列也是有一个模板,一个head来记录顶端的值,rear记录当前数
while (head<=tail&&q[tail]<=a[i]) tail--;
tail++;
q[tail]=a[i];
indx[tail]=i;
这就是比较常规的操作。
5.总结
总之,很感谢老师能给我们这么一个机会一起集训ACM,而且也很感谢自己选择留下来,做与众不同的事,我不后悔,我会一直坚持下去,为了现在的自己,也为了未来的自己,加油。