day1(2018.5.22):
一套题开头,被虐得不成样子,只有341分,排在了第5名.
当天blog已写好,有几道题没写出来.
再也不敢写错快速幂了,快速幂应该用二进制拆分指数k的思想来写:
int power(int a,int k,int mod){ int s=1; while (k){ if (k&1) s=s*a%mod; a=a*a%mod; k>>=1; } return s; }
快速幂写错导致从AC变成爆0已经两次了.
day2(2018.5.23):
来了一些数论的知识,表示以前很多都学过,但只会口糊.
现在把进制位复习了一边,以前进制位这东西是在学pascal的时候用过,自从转C++之后一直都没有复习过.
然后下面是一些整除,同余讲了一下概念,又讲了一些性质.
接下来不知道怎么的又讲了下快速幂,导致心情瞬间崩溃(毕竟被坑了两次).
再手写一遍long long(指数也是long long)写的快速幂:
long long power(long long a,long long k,long long mod){ long long s=1LL; for (;k;k>>=1){ if (k&1) s=s*a%mod; a=a*a%mod; } return s; }
之后又讲了质数和合数,以及质数的埃式筛法和线性筛.
接下来讲了讲唯一分解定理,又讲了讲最小公倍数lcm和最大公约数gcd.
然后讲了讲欧几里得和扩展欧几里得.
又讲了讲两个定理.
威尔逊定理:若p为质数,则(p-1)!≡p-1 (mod p).
费马小定理:若p为质数,则a^p≡a (mod p).
最后讲了讲欧拉函数的相关知识.
比如说欧拉函数的表示符号φ和概念.
还有欧拉定理:若gcd(a,p)=1,则a^φ(p)≡1 (mod p).
然后上午的课就上完了.
晚上又讲了讲KMP,表示以前就学过.
day3(2018.5.24):
上午将第2天没有太详细证明的三个定理证明了一下,讲了些例题.
晚上讲了讲manacher算法,表示一脸懵,什么都没听懂.
最后好像还讲了一会trie树,表示这不是傻逼数据结构么.
day4(2018.5.25):
去参观了上交大和上纽大,很开心.
day5(2018.5.26):
早上讲了下状态压缩,讲了很多例题,由于太菜了,没写多少题.
不过听懂了一些位运算的技巧,比如说如何枚举子集什么的.
接下来就刷了很久的题.
day6(2018.5.27):
早上讲了一些树的dfs序的基本概念与写法,与图的基本一样.
接下来是树的lca,求树的lca,有三种方法:倍增,tarjan,RMQ.
结果我只写过倍增lca.
主要是将tarjan讲了一下,以前写过但是调了半年没调出来.
RMQ求lca虽然在线而且查询是O(1)的,但是当出题人想卡你一个log(n)的时候,这出题人不把数据出到5*10^6是不行的.
所以这也不常用,就没写.
接下来为了讲树上差分,还听了差分,然后表示不是很水么.
然后又讲了讲树上差分,讲了一道NOIP2013货车运输.
树上差分其实就只是一个公式:dis(x,y)=deep[x]+deep[y]-2*deep[lca(x,y)],但能在NOIP的时候代替树链剖分的很长一段代码.
day7(2018.5.28):
所以我也很无奈啊.
不过最大的收获是左偏树,因为我线段树基础9题都写完了,树状数组也不可能扩展到哪里去.
以前只会写STL的priority_queue,而且结构体重载很难记,所以想定义一个结构体堆很麻烦.
然后又去学了下二叉堆的写法,但感觉跟左偏树比起来太长了,还不能合并.
然后还讲了一道例题,讲了讲左偏树的应用.
晚上就是写题.
day8(2018.5.29):
ACM欢乐赛,感觉自己好菜啊,只写出了4题,虽然剩下4题中也有几道是来不及写正解.
幸好队友强,不然我就挂了.
顺便这几天还偷偷学了会网络流,贼开心.