15天集训前半期(2018.5.22~2018.5.29)学习总结

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题中也有几道是来不及写正解.

幸好队友强,不然我就挂了.

顺便这几天还偷偷学了会网络流,贼开心.

猜你喜欢

转载自blog.csdn.net/hzk_cpp/article/details/80496403
今日推荐