2017国庆 济南清北学堂 8天乐


Day 0

想吐槽济南的堵车
大约接近4点从莱芜走的,走高速一个多小时,5点左右就到了济南,但是因为济南的堵车,下班高峰期,用了两个多小时才到了我们的目的地。好不容易到宾馆登记了,mc还要我们开会,8点才吃上饭,饿死了。没错,又是上一次的山东教育大厦,还是那个很荒凉的地方,都找不到几个好的吃饭的地方,上次就已经吃够了,真烦。不过很幸运的是,我居然抽到了房号520,隔壁521居然是qyp和gjh,还是隔音效果很差,能听到他们大笑的声音mc居然又让我查房,我问mc能不能再找一个女生跟我一块,他居然说让小彤,好吧好吧
吐槽宾馆的网,连了半天才连上,哇,好烦
明天8点上课,不能颓废了,现在不是高一了,要好好学习,本来想着晚上来打完白天的程序的,看来不行了
晚安世界
2017.9.30 22:44


Day 1

又是毛毛虫给我们讲课啦,,
我居然在第一排,和他正对面
今天讲的题还是有点水,明明是精英班,却讲成了基础班,搞了
半天在讲高精度,我只想说内心好崩溃
不过,毛毛虫还是讲了一些不很常见的东西,开了一点脑洞,也
还是有收获的:
比如:
定义一个 long double ,他的存储方式是,浮点数乘以2^k,所以,我们如果直接用long double输出2^k,它储存的是1*2^k,因此不会爆精度(好机智233)
今天认识了旁边一个初中的小学妹,一直在问我问题,还尊敬地叫我“您”,哇,感觉有点受不住
下午考试了,T1打了高精度乘法,虽然没有推出公式,但是自己手算了几个例子,发现答案是4^((n-1)/2),n<=1000,不用快速幂就可以,直接高精度,T2也不难,是一个二分答案加验证,用了一点点平面几何的知识,竟然也A掉了。虽然感觉题很水,却没想到居然分数rank1了,尽管运行时间有点长(第三题我随便rand了一个数,拖慢了我的运行时间233),前六名都是200分,然后我因为运行时间,成了三等233,是个耳机,上次也是个耳机,不过也还好,还有毛毛虫送的明信片,虽然不好看,但是也是一份象征哇。。
还记了一点笔记,不过电脑一重启,没保存的就丢失了,没关系反正记的也不多,能想起来的
summer说是她的生日,说要跟我一起查房来着,今年没有蛋糕了233,话说我想吃蛋糕。挨个敲门的感觉真好。回来就十点了,一磨蹭,又11点多了
说好的济南很冷呢,热死了。。
不管了,明天还要上课,宾馆的网真的好不稳定,又没办法上网了,我的借教室还没有调试完,明天再说吧。
困死了
晚安
2017.10.1 23:14


Day 2

今天讲了将近一天的数论
好讨厌,数论太恶心了
各种公式推导啊啊啊啊
上午讲课居然有很多人在问什么是vector,天哪,为什么不去普及组,不知道vector,来上精英班!小彤说想去刷题班,但是问了问刷题班讲的东西也有点水,而且天天考试,不如在这听课。233晚上跟数学奥赛的同学要了他们的辅导书的照片,上面是推导欧拉定理和费马小定理的证明过程,讲真比毛毛虫的课件明白多了,但是他的线性筛什么的还是不太明白,拷来了代码,争取还是努力看懂吧
写了一点笔记:
—>—->———>———–>———->———->
(一些听懂了的东西2333)
1.费马小定理证明:
对于1~p-1的排列 比如p=7
1 2 3 4 5 6
那么在%p意义下,排列1*a,2*a……6*a和它是同一个排列也就是两个排列各项乘积相等,设1*2*……*p-1=k
则k*a^(p-1)=k (mod p) 也就是 a^(p-1)=1(mod p)
2.逆元:
已知 a^(p-1)=1(mod p)
则 a*a^(p-2)=1;(mod p)
a^(p-2)=1/a(mod p)
3.线性筛素数:每个合数都被最小的质因数筛掉,且不会被重复 筛,if(i%prime[j]==0) break
优化后 变为O(n)
——–>————>————->————

哥哥送来零食,好多,感觉自己吃不了,还有妈妈放在行李箱里的水果,看来要把吃的运回家了。他回家了,好羡慕,他8号回济南,然而我8号回去,正好见不着,看来下次见也要过年的时候了
回来给学妹讲了全排列,感觉明白的好快,是我讲的明白还是学妹理解能力好?反正我第一次学的时候懵逼了很久,调试了很多遍才看懂递归的过程233 58级好强
emmmm,就这样吧,晚上好冷,看来明天要降温了
晚安
2017.10.2 23:01


Day 3

今天换老师啦!前两天都是毛毛虫,今天换成了吴克文老师,今天的内容是dp,不过,感觉吴老师语文应该很好吧2333,他的语言表达能力很强,讲题很清楚。。。。。。
之前寒假黄天老师讲得dp很明白,这次也挺好。感觉今天做的笔记是这几天以来最多的了。不过,到晚自习有人让他从头到尾讲了一遍233,感觉老师已经虚了。。(绝望的眼神),旁边小学妹说,她去问老师题,看到老师“只剩一口气了”。。。。
晚上学妹们在我房间听数论,孟学姐讲的,我咸鱼一条就来写日记了。要不然把今天的笔记黏贴上?好吧,但是感觉好多。。老师讲背包的时候犯困了233于是错过了单调队列优化多重背包,其实二进制拆分是很好明白的,二进制拆分O(NMlogM),单调队列优化O(NM),其实差不多,只是常数优化
下面是笔记部分:
——–>———>———>———>———->
一:线性DP
1. O(nlogn)最长上升子序列:
g[x]以小于等于x为结尾的最长上升子序列长度,单调不减
f[i]max=g[a[i]-1]+1
转移代码:

 int getans(int x)
{
   int ret=0;
   while(x>0)
   {
      ret=max(g[x],y);
      x-=x&(-x); 
    }
   return ret;
}
void  update(int x,int y)
{
   while(x<=MAXN)
  {
    g[x]=max(g[x],ret);
    x+=x&(-x);
  }
int main()
{
  for(int i=1;i<=n;++i)
  {
     f[i]=getans(a[i]-1)+1;
      update(a[i],f[i])
   }
}

2.数字三角形,取模后最大
f[i][j][k]走到这个位置是否能获得余数k
f[i][j][k]=f[i-1][j][(k-a[i][j])%mo]| f[i-1][j-1][(k-a

[i][j])%mo]
状态数:100×100×mo
代码:

f[0][0][0]=1;
f[0][1][0]=1;
for(i:1->n)
  for(j:1->i)
    for(k:0->mo)
      f[i][j][k]=.......

注意 f下标要写为:(k-a[i][j]+mo)%mo,防止负数下标
最后统计所有f为1的点中k最大的,即为答案
3.数字三角形,必经一些点,最大
f[i][j]到i,j这个位置的最大和
每两个必经点之间可以走的范围是一个矩形
方程:
f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i][j])
代码:

void solve(int x1,int y1,int x2,int y2)
{
  for(int i=x1+1;i<=x2;++i)
    for(int j=y1;j<=min(y2,i);++j)
     //if(i==x1&&j==y2)
       f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i][j]) 
}
int main()
{
int d[n][2];
int prex=1,prey=1;//上次的终点
for(int i=1;i<=m;++i)
{
solve(prex,prey,d[i][0],d[i][1]);
prex=d[i][0],prey=d[i][0]
}
}

滚动数组优化空间:

int g[n];
for(int j=1;j<=x1;++j)
  g[j]=f[j];
for.....
  f[j]=max(g[j],g[j-1]+a[i][j];
for(int j=1;j<=i;++j)
  g[j]=f[j]

4.最长下降子序列的方案数
记g[i]以i为结尾,长度为f[i]的最长下降子序列方案数
f[i]:以i结尾的下降子序列的最长长度
g[i]=Σg[j],j < i,f[j]=f[i]-1,a[j] > a[i]
ans=Σg[i],f[i]=LDS !没有去重
去重:如果前面有n个k转移到k’,那么前面的n-1个都是多余的,只有最后一个k转移过来的才是答案,开一个数组记录前一个数是否已经出现过

for(int i=1;i<=n;++i)
{
if(f[i]==1) g[i]=1;
else  
{
  memset(vis,0,sizeof(vis))
  for(int j=i-1;j>=1;--j)
  if(a[j]>a[i]&&f[j]==f[i]-1&&!vis[a[j]])
    {
    vis[a[j]]=1;
    g[i]+=g[j]
    }
}
}

避免最后一个被重复统计,在末尾加一个负无穷
如a: 3 2 2
g会变成:1 1 2
如果在后面加一个-inf:
a:3 2 2 -inf
g: 1 1 1 1
二:区间DP:状态是一段连续区间
1.多边形表达式
f[i][j]从i到j的表达式加括号后可以达到的最大值
g[i][j]从i到j的表达式加括号后可以达到的最小值
避免负数相乘大于正数相乘或正数减负数
枚举k,为运算符在字符串中的位置
l为区间长度,以区间长度来转移
像能量项链一样copy
预处理自己到自己的答案:
for(int i=1;i<=n;i+=2)
f[i][i]=g[i][i]=a[i];
2.取数游戏:
f[i][j][k]:到时刻i,取j~k区间的最大值
={
f[i-1][j][k-1]+a[k]*t[i];
f[i-1][j+1][k]+a[j]*t[i];
}
优化:i=n-(k+j+1);
去掉第一维,空间复杂度变为O(n^2)
只循环区间长度和起点就行了,时间复杂度变为O(n^2)
3.石子合并++:每次可以选择相邻的2~n堆合并
直接全部合并
4.石子合并+++:
把石子补到一定数量,补的石子都是0,使每次合成k堆
5.删数游戏:
(1)O(n^4)复杂度
f[i][j]表示区间[i,j]能否完全删光
f[i][i]=0
f[i][i-1]=1(用来处理边界条件,减小代码长度)
枚举每个区间最后一次删的数是哪两个
枚举k,l f[i][j]|=(f[i][k-1]&f[k+1][l-1]&f[l+1][j])&

(a[l]-a[k]∈A)
(2)O(n^3)复杂度
i < k < =j
f[i][j]|={
f[i+1][k-1]&f[k+1][j]&(a[k]-a[i]∈A)
f[i+1][j-1]&(a[j]-a[i]∈A)
}
代码:

  int main()
   {
    map < int,int >  vis;
    for(int i=1;i < =m;++i) v[a[i]]=1;
    for(int i=1;i < =n+1;++i)
    {
        f[i][i]=0;
        f[i-1][i]=1;
    }
    for(int l=2;l < =n;++l)
    {
        for(int i=1;i < =n;++i)
        {
            int j=i+l-1;
            if(j > n) break;
            f[i][j]=0;
            for(int k=i+1;k < =j;++k)
              f[i][j]|=f[i+1][k-1]&f[k+1]

[j]&vis[a[k]-a[i]];
        }
    }
    }

6.删数游戏+
(1)O(n^4)
最后删:a[i],a[k]
f[i][j]|=f[i+1][k-1]&f[k+1][j]&vis[a[k]-a[i]];
最后删a[i],a[k],a[l];
f[i][j]|=f[i+1][k-1]&f[k+1][l-1]&f[l+1][j]&(a[i]+a[l]

=2*a[k])&(a[k]-a[i]∈A)
其中:i < k < l < =j
(2)O(n^3)
f[i][j]|=f[i][k]&f[k+1][j],i< k < j
f[i+1][j-1]&(a[j]-a[i]) k=j
f[i][j]|=f[i][l]&f[l+1][j],i < l < j
f[i+1][k-1]&f[k+1][j-1]&(a[j]+a[i]=2*a[k])&

(a[k]-a[i]∈A)
三.记忆化搜索
1. 滑雪:
f[i][j]到(i,j)的最长单调减序列长度
f[i][j]max=f[i-1][j]+1,a[i-1][j]>a[i][j]
f[i+1][j]+1,a[i+1][j]>a[i][j]
f[i][j-1]+1,a[i][j-1]>a[i][j]
f[i][j+1]+1,a[i][j+1]>a[i][j]
2. 数字三角形++(递归版记忆化搜索)
四.背包:(好吧没有记什么笔记只有最后一道题)
课后题:圆滑数:
分解质因数统计2和5的个数
f[i][k][j]到第i个数,已经取了k个,之前累计j个5时,最多

有多少个2
考虑第i个取还是不取
f[i][k][j]=max(f[i][k][j],f[i-1][k-1][j-n5[i]]+n2[i]);
对于有的数是0,记一个bool型的数组标记这个数是否为0,

ans记为1,在循环时直接跳过
—>—>—>—>—>—>—>—>—>—>
以上的笔记是我手打的,可能有些错误,要是那里打错了,以后再改吧233
晚上mc给我们开会,为了慰问我们(国庆节和中秋节一块,我们没法回家了),发了苹果和香蕉,还有黄金酥,虽然不喜欢吃香
蕉,但也是mc一份心意,就收下了吧。
今天很早啊,想早一点睡觉的,结果在这里讲课,好吧没办法了,明天再早睡觉吧
停课的日子很快就会过去,停完课就是地狱的开始了,虽然是一个挑战,但是我希望我能有和别人不一样的高中生活,有挑战,才有意思,要是平淡无奇的走过了,没有这段独特的奥赛经历,我的高中生活也不值得回忆了加油,明天还要好好听课,不是高一了,不能贪玩了,noip2017一定要退役啦
2017.10.3 22:27


Day 4

am:

吴克文老师讲课的最后半天,树形dp和状压dp,感觉挺难的2333老师好可爱,班主任要给他拍照他竟然害羞地趴在笔记本电脑后面。不过,其实班主任还是很机智的,居然在快下课时让我这个坐在第一排老师斜对面的人帮他给老师拍照233,于是我干了一件“要摸着良心的事”,帮班主任偷拍了老师。。(还要我把清北学堂的牌子也拍上)
上笔记:
—–>—–>—–>—–>—–>—–>—–>—–>
一.树形DP
1.最长链:(边权为1)
问题转换成:求每一个子树中经过根节点的最长链
d[i]以i为根节点的子树向下的最长链
d[x]=1+max{d[y]}
ans[x]max=2+d[si]+d[sj] (i!=j) s表示x的子节点编号
si sj是所有根节点中d数组最大和次大的两个
用两个计数器,求次大和最大
2.最长链+:(边权为正数)
d[x]=max{d[y]}+e[x][y] (x连向y的那条边的边权)
ans[x]max=(e[x][y1]+d[y1])+(e[x][y2]+d[y2])
要求e[x][y1]+d[y1]和e[x][y2]+d[y2]是最大的
3.最长链++:(边权有正有负)
两边dfs不能处理带负边权的图
4.最大点权独立集+(有点权环套树)
做法1:选环上的一个点,从这个点分开,分成两棵树,枚举这

个点选或不选,dfs两遍,求最大值
做法2:把环单独拿出来考虑,连接着环的每一棵树都看成从环

上那一个点出发的树,把整棵树的信息
收缩到这个点上,在换上进行dp,每一个点都保存取或

不取这个点时,这颗树上的最大值
如何处理环上的?
破环成链,看成一棵树,做树上dp,注意,不能用

复制,枚举起点的方法
5.树上背包(二叉树)
w[i]:i的大小
c[i]:i的价值
W:背包大小
f[i][j]:到i节点时(以i为根的子树),已用至多j容量的背包

的最大价值
边界条件:f[i][j]=0 j < w[i]
设k1和k2为他的左右节点
枚举t
f[i][j]=c[i]+f[k1][t]+f[k2][j-t-w[i]];(0= < t < =j-w

[i],j>=w[i])
如果i只有一个k1,f[i][j]=c[i]+f[k1][j-w[i]]
边界情况:只有一个点:f[i][j]=c[i]
最后答案:f[i][j]=max{f[i][t]} (t<=j)
复杂度:O(nm^2)
6.树上背包+(多叉树)
多叉树转二叉树
转换方法:
(1).加点,权值和价值都赋为0;有s个子节点,则有s-2个新加

节点
(2).左儿子右兄弟
二.状压DP
1.简单题:
f[i][mask],到第i行,状态是mask时的方案数
f[i][mask]=f[i-1][mask]+f[i-1][mask2]
mask:如0110,第一列没选,第二三列选了
mask2表示其他可能的情况
ans=f[n][mask] mask: 1~2^m-1
2.简单题+:
压一行的状态,在转移时,不仅考虑这一行,而且考虑上一行

的状态
每一行的状态只影响下一行
f[i][mask] 到第i行,取第i行mask状态的方案数
mask2与mask不相斥,则f[i][mask]=Σf[i-1][mask2];
边界条件:f[0][0]=1;
遍历符合条件的mask2:(位运算)
mask有1的地方,mask2不能有1
打表数组valid[mask]=1/0:
{
1:表示没有相连的1
0:有相连的1
}
判断是否冲突:&位运算是否为0
并且:mask2 & ~mask==mask2即mask2包含在mask里面

 int c=mask;
    while(c>0)
    {
        mask2=c&~mask;
        c=(c-1)&mask
     }

也可以:(mask>>1)&mask是否等于0


pm:

下午是钟慧兴老师了,看见他第一眼,我去,长得真的好像lmx,只想说学霸是不是都长得一个样子
老师说话口音很奇怪,讲的很认真但是我莫名的听不下去,哇,不知道为什么
中秋节,窦老师果然准备了月饼,不只有月饼,还有苹果和橘子。
mc带我们去大明湖赏月啦!八点就走了,少上了1个小时的晚自习,不过大明湖的晚上好美,好喜欢那栋古楼。黑夜里,无数盏灯在上面亮着,我可以看得到楼上的窗子,虽然里面是黝黑的一片,我望着它,总像穿越到了古代,穿越到了繁华的长安街,看不到的楼内,隐藏着我无限的幻想。我想象着里面可能的样子,仿佛看到了古代达官贵人在那里面饮酒赏歌,看到了繁华和歌舞升平,又想起了盗墓笔记里的阴山古楼,看到了神秘莫测和未知的危险
美好又神秘的东西总给人无限的幻想,到现在我还在想能不能登上去看一看,那古老陈旧神秘的门内到底是什么……
到宾馆已经11点了,后半部分是我第二天写的。
恩,不过,还是晚安,世界,虽然我还要继续写今天的日记。
2017.10.5 22:59


Day 5

钟慧兴老师讲的东西真的是:难的讲的快,简单的讲的慢。虽然老师并不是很有经验,但是讲的很认真,认真就好。
一天的数据结构,大部分都会了,感觉一天都在划水
wyh大佬听说这里在讲主席树,居然pdpd跑过来了(他瞎想的),来了之后发现在讲线段树下方标记,几个学长学姐也说要来来着,因为刷题班的题太难了,why大佬居然说因为刷题班太水所以跑到这里来2333,果然还是太神,但是精英班已经没有座位了,这就很尴尬,他们还是没来。晚自习也没干什么事情,打了个动规,虽然树状数组还是没有学会
听青岛大佬说,青岛中考满分780,青岛二中的分数线730,真是厉害,济南大佬说,他们满分570,省实验分数线524,我说,你们去做做莱芜的中考数学题试试。。。(号称山东最难数学题),不过人家毕竟是大城市,人多,大神还是很多的
晚饭订了一个披萨,搞了半天没有网银,让青岛二中大佬帮忙,大佬挺热情的,还帮我们拿上来,虽然快递员等了半个小时2333感觉快递员挺辛苦的
晚上闲得无聊和某人聊了许久,这么长时间了说句话不尴尬了,但是还是没有什么共同话题,比较尴尬吧,或许以后我们走不同的路,不同的会越来越多,有些事情是注定的啊,也没办法,有些想法还是不要说出来,有些事情明白就好了,大家都明白,说出来反而尴尬了。唉,不发感慨了,要赶紧睡觉了,明天上课又要犯困了,明天图论不会从存图开始讲吧,感觉又要划水了,清北学堂的授课分类越来越不合理了。
今天也没有笔记,钟慧兴老师的课件上面太全了,啥都不用记,就写这些吧,要睡觉了,再不睡觉就死了,
晚安
2017.10.5 23:11


Day 6

又划了一天水,今天将图论
我天真的以为他会从存图开始讲,果然是too young too naive,他是从什么是图开始讲……
一整个上午只讲了最短路和最小生成树,结果基本没听,那我们当基础班也就算了,还拿我们当普及组基础班,感觉一天没有什么收获
中午跟着mh学长去了比较远的美食广场,原来这里真的是济南的市中心,多走走就走到了繁华地带,虽然远,但是很好吃的,鸡公煲,还有很多好吃的。回来经过一家蛋糕店,买了明天早晨的口粮
晚上想着打矩阵快速幂,然后再做两个题,结果,旁边的青岛二中妹子给我和历城二中的小学妹讲起了博弈论。虽然讲了将近两个小时,一直到放学,但是这不是tui吧,感觉学到了不少新的东西,从来没接触过博弈论,感觉挺好玩的
哇 说好的要早睡觉,high着high着就11点了,不管了,明天讲kmp,字符串,不能再划水了,明天千万不要讲n遍kmp就好虽然觉得kmp挺难理解的,但是我之前已经搞懂了啊233
明天可以晚起了,买了面包终于不担心口粮了
学妹还在追番,我就先睡觉了
2017/10/6 22:54


Day 7

明天早晨7:40就要去上课,虽然我和亓立宇一直都是这个点之前到,但是感觉还是要稍微早一点起,毕竟明天还有半天的课,今天晚上也不能high到太晚2333
下午又考试了,不过,我经历了人生中的第一次爆零。第一题是manather的板子题,但是上午刚讲完manacher就放学了,板子的代码我还没有看,所以一上来我先打了个暴力,没想到怎么调试都是死活re,调了半天,神一般的把string改成了char数组,然后过了样例。一看时间,还有两个小时就要交卷了,好不爽,看了t2和t3,一个是dp,一个是图论,而且都不是很简单,单单看T2的题面的长度,我就不想做了。于是我立志要把第一题的正解打出来,不要做后面两个题了。
终于,打了一个半小时,manacher没有打出来,我打了个分段函数,交上了。本来以为30分的暴力可以拿到,稳稳的。没想到吃完饭回来听说只有十个人有分,其他人都爆零了。好吧,我觉得我也能拿30吧。一看成绩,果然是零分。哇,人生中第一次爆零的感觉。。。。。。
下午发了数据,我找来第一个测试点,发现我的暴力果然打次了,但是我调试了一晚上都没有调试出来到底是哪里出了问题。在done函数中,我把len变量赋值之后,在动态调试中,出现了一个很大的奇怪的数字,导致我的程序进入了死循环。但是我静态调试输出的时候,len的值输出是正确的。233我已经不想调试了,一个暴力都能打次,真是没治了。我还是好好去学学manacher算法怎么打吧。。。
明天就要走了,虽然是最后一天晚上,但是还是不能太晚睡觉啊。记得明天早晨还要早去上课。
哇 又快11点了,2333今天晚上还要收拾东西,明天早晨mc让所有的女生都把行李放在我的房间里,然后其他房间集中退房。、
明天不能起的太晚了,我要去收拾东西了2333
好吧,还不能晚安,等我收拾完东西才能说晚安
2017/10/7 22:56


Day 8

回家了。
雨天的离开总是有些伤感。从前天晚上开始下雨,空气一直很弥漫着水汽,这座北方的城市,竟有些江南水乡的感觉了。喜欢空气里潮湿的味道,绵绵小雨,像是送别。
十二点多时,大家已经开始上车了。车里闷热的空气,让透不过气的我下车。扑面而来的清爽,让我刚不想离开了。虽然是短短的一个星期,我却对这里有些不舍了。这或许是最后一次外出学习了。或许是最后一次喝着窦老师发的酸奶,听清北的老师讲课,看着屏幕上水的弹幕。学妹的作业还没有做完,这几天赶着很晚才睡。像我这样没有作业的人,是不是真的就很轻松呢?其实不然。虽然没有作业上的压力,但却有noip一等的压力。我不知道自己能不能拿一等,我没有把握。之前也有很多学长学姐很有把握却GG了。不能松懈,不能看眼高手低,还是要好好学习。停课也不能放松自己,还是要加油吧。
回程,qyp和mfc他们几个,还有meico,都high起来了,在车上唱起了歌。这次没有堵车,12:45开始走,2点多就到了。莱芜也是雾气氤氲,顺路吧小彤捎到了寨里,她非自己坐车回大王庄了。
一路上看着风景,竟然不想睡觉。雨后,高速路经过一层一层的山,都被雾气笼罩着,像误入了仙境。
再见了,济南。
2017/10/8 16:53

你可能感兴趣的:(===模板&笔记&随笔===)