省选前的考试日志
1.30
先看了T3,发现是插头DP,码完发现n的范围1e18,发现有效状态数只有21,如果两行都没有东西的话,可以矩阵快速幂转移,打了两个多小时,之后一直在调,还剩90min左右时调完了,把前两题暴力打上了。之后看了看T1发现貌似是原来看过的一种高级线段树,不会,又想分块,不太清楚怎么维护。又看T2,好像也是矩阵快速幂,但是只有不到40min了,就没打,又看了看三道题就完了。T3数组开了个30×4的,炸了50分,又不卡内存,以后至少多开5。T1T2暴力都拿到了,然后就rank1了。。。
补补之前的吧
1.27
发现T2好像zyf和lc原来在做主席树的时候做过,然后就想主席树,发现只要维护子树中深度在一个区间内的子树和就行了,打了一个主席树+dfs序。看T1好像是数位dp,发现总状态有三万多,然而我只会O(n^2),发现好像有70分,码码码。打完。看T3,完全不会做,n=1时跑了个manacher,否则输出0。70+100+35=205 rank4该拿的分都拿到了,很好,T1后来把暴力改了改过了。T3是manacher+sa+最短路,十分恶心。
1.21
先看T2,貌似他们都做过,sa直接上单调栈,O(n)。感觉没啥问题,看T1,先打了个随机化算法(貌似骗了95分),后来一看,sb网络流啊,码码码。之后看T3,貌似是很屎的莫比乌斯反演+杜教筛,打了打表,没发现啥规律,最后就爆零了。100+100+0=200rank7。发现T3不是特别难。没打出来表,好伤心。
1.4
发现T3就是sb点分治,打完看T1,好像真的是动态树,维护什么呢,一个k,一个b,然而并不知道该怎么搞,再去看T2,推了个式子,发现有20分,打了出来,发现根本推不下去了,然而T1没有部分分,就懒得打暴力了(然而wq暴力A了,233)。0+20+100=120rank2。T1真的是LCT好题,T2初始式子就不对,所以真的推不下去。
2.1
先看了T3,发现应该是SB树套树,而且有个地方题里没说明白,就没开。又去看T2,发现是Lucas,先打了50分,然后打表,没找着规律。再看T1,SB计数题啊,随便容斥一下不就行了。打打打,发现好恶心啊。然后打了4个小时,最后调出来了,把T3暴力打上了。发现T1TTTTTTT了,一看,init是O(n2)的,草草草,然后就挂成暴力分了。30+50+33=113rank3。草草草,太傻逼了。这两天老是犯傻逼错误,希望能为WC攒攒RP!但是以后一定要尽量杜绝这种现象!
wc考试
先看T1,发现44分很可做,就打了暴力和倍增水了44分,后来发现56分好像也不是太难,但是还是决定先去看后面的题。看T2,一脸懵逼,什么都不会,后来发现时限15s,于是决定打暴力,水20分,再看T3,交互,发现我只会n<=100的20分以及链的30分,打上以后算了算,44+20+50=114,成功达到上一百的目标,但是就今年这种水题,估计金牌线给200,最后检查了检查每道题,又给T1,T3写上了乱搞。实践发现乱搞是很有用的,48+20+65=133,T2是真的没想到子集dp的50分做法,原来没做过,但是貌似T1和T3有些能拿到的分并没有拿到,但是后面的乱搞都补回来了。T2的锅我也没有发现,也没有什么影响。最后ag滚粗。
2.21
时间过得好快啊。
今天心情不是很好,本来能想到的题没有想出来,能拿到的暴力分也没有拿全。
先看T1,40很显然,60推了一下好像可以直接矩阵乘,打了打发现不对,需要在一个矩阵内乘起来统计答案,不可做,弃疗,看T2,发现链上的我居然也不会。打了40分暴力,发现时限30s,有打了个小骗分,但是也没造数据,就玄学的估计了个上限让他跑去了,T3的50分比较简单,hash水了一下,发现正解应该是后缀数组,但是觉得那样没办法判断是否重合,判断是O(n)的,于是就没有写。40+20+50=110,rank8,T2暴力果然挂了。T3后缀数组硬跑貌似能得80分,sam+lct的暴力90?希望能赶快调整状态吧。
2.23
转眼两天就又过去了。大年初八了,不知道十五放不放假,这两天没事就刷空间,比较颓废,但是如果不这样的话,我都不知道我会是哪样更糟糕的状态,消愁,无法消愁。考试先看T1,吉司机线段树?不会。看T2,爆搜?不会。看T3,LCT维护子树信息,不会打,弃疗。觉得考试不能爆零啊,回去看暴力分,觉得T130的暴力和T2的30应该很水,T1 1e5的随机数据不太清楚,打完T1暴力想分块,发现对于取max操作,覆盖的区间(排序后的)是单调不降的,复杂度O(n*sqrt(n)*log(n)),卡卡常应该有戏,码码码,还剩90min左右拍上了,看T2,打完30暴力看着1000的数据范围觉得网络流,想了一个错误的费用流建图越走越远,T3暴力也没写。考试结果说明了一切,20+30+0=50 rank10,T1觉得很稳结果没有考虑add=0就挂了,但是貌似T1全场都会而且基本都挂在这了,也没什么可说的。T2想到了网络流,但是方向错了,一直在想费用流建图,却没有想最小割方面的,最后没想出来。T3看到1e4就没想着打O(n2)暴力,与30(40)分擦肩而过。LCT还是比较妙妙啊,我还是不会打啊,这题就是大融合+动态树好题啊,只想到了维护子树信息,也没着手去打,自我感觉还是比较准确的,233。老吕下午好像讲了讲,好像不怎么针对我了,也许觉得我快退役了吧。怎么今天写这么长啊,跟游记似的。
2.25
怎么转眼过了两天啊,昨天我干啥了。好像刷了一道半群论。
考试依旧爆炸,心态也平稳了许多,整场考试一直在推T2,但是却没有想到把最大公约数提前,而且一点暴力分都没有。T1一直在想置换的东西,许久不做dp题,现在一点感觉都没有了,根本没有想到。T3想打5分暴力呢,打着打着发现有坑,干脆弃疗。20+0+0=20 rank11(tot=12)操,不能再这么GG下去了,下几场考试一定要努努力,告诉他们我有能力!flag++;下午基本是在颓废,晚上把T3抄过了,准备把昨天的1478水一下,估计要是不做置换,T1没准还能想到呢,真操蛋。说白了还是对知识点不够熟练。谁知道还能学到什么时候呢。T3是集训队互测题,貌似也就这样,再让我学半年多我肯定虐他们。不行,我的数学现在差了好多呢,给补补数学。
2.28
考试,先看T1,判负环?spfa?只会二十,再看T2,各种找规律,好像有七十分,写,写完发现T3是原题,抄抄抄,写完T3又回去写了一下T1的乱搞。40+50+100=190 rank3。ccc,下午被老于查水表了,T3翻车了。被教训时还顺便请了个假,我十五要回家。不管那么多了,瞎jb学吧。
3.2
5小时8道题的ACM个人赛,然而我只能做六道。
G是WQ的题,他寒假和我说过,打算先切掉那个(while(1)flag++;),推了一下式子发现很简单,写写写,写了一个小时啊,没调出来,这时候发现两三个人都A了T2了,打算先看看T2,缓一缓,发现是SB题,直接树剖套主席树,查询直接二分就可以,20min码完,样例直接过,交上去1A。接着回去调G,又过了快一个小时,还是没调出来样例,无奈!!!又看了一下榜,发现H题好像可做,这时候发现wzz和srs已经A掉zzh的LCT了,感觉很吊。于是去切H,推了一下式子发现是傻逼多项式求逆的题,30min切掉,看榜,A题A了一片了,好像是被暴力踩过去了,我还不能做,都怪我没有好好验题!接着回去调G,打了个暴力拍+肉眼查错,10:10调过了样例,感觉很稳,交!TLE90%!操???卡常,WA88%!无语,只能先拍着,发现大多数人在水掉A之后都比我高了,必须至少在切一道,读了一遍题,发现F好像是个傻逼线段树,写!11点半写完,过了小样例,大样例一点不对,调!发现了好几个傻逼错误,最后11:50调过了,交!A了,现在第五,G题又交了好几遍,都是WA。看了一下榜,zyf和wxhao都比我高28分,发现还有一个30分暴力没写,12:05写完了,样例不过?!肉眼查错,十分紧张,浑身是汗,为了翻过去他俩,发现有个地方少减一,减掉过了样例,交,30分到手!,看榜,wxhao把我那题的数数分得了,高我8分,rank4。第一次打这种比赛,挺爽的。希望以后还有机会!
那么以后题解也写到这里吧!
就从这次考试开始
A题,正解是LCT维护子树信息,f[2][2]分别代表splay链顶和链尾选不选分别转移就好了,还要记录虚子树信息。挺不错的一道题,然而我验题没有写程序,被暴力踩了,我的锅。
B题,水题,树剖+主席树,貌似正解是整体二分。没写。
C题,calc线段树或CDQ分治,都不难打,CDQ:按x坐标排序,每次按y排序,对于前面的维护一个x递减的栈,后面的维护x递增的栈,再在第一个栈里二分。
D题,很巧妙的一道题,第一问我们将砖按h从大到小排序,一样的按key从小到大,每次按照乘法原理乘上可能放的位置数量。第二问维护一个线段树和一个set,set按字典序排,线段树按h排,每次在线段树中找到第一个key为1的地方,如果有,他就是答案,地方太小,证明写不下。没有的话,直接找当前还剩下的字典序最小的就是答案。
E题,出题人最帅!题还是不错的,无根树转有根树,之后枚举子树大小dp,加上一些组合数,比较巧妙。
F题,线段树子序列最大值,区间翻转,单点修改。貌似是网络流模型用线段树优化,然而并没有想到。
G题,wq的题,考完试发现我WA88%是因为double精度炸了。应该把分式通分上去。挺水的。
H题,推一下式子发现$H=\frac{1}{A-1}$,裸多项式求逆。
完结撒花!
3.4
看T1,多项式求逆裸题,一开始傻逼写了个快速幂,调了1h发现乘出来是0,有毒。然后大概在90min时写完了,拍上了,题意也不清楚,其实应该是几个肽都算,题里非说是多肽链。然后看T2,式子好长懒的看,就去看T3,推了一个O(n2)的式子,感觉还能接着推,于是推了2hT3,然而什么也没有推出来,最后回去看T2,发现是字符串的题,但是什么算法复杂度都不对,最后打了一个30分暴力+减枝。100+40+20=160 rank5。减枝多了十分!T2也是FFT???有毒。。。貌似bug被发现了,我还被表了一顿。
T1,等比数列求和,上面的$F^{n+1}$在模$x^{n+1}$意义下一定为0,所以就是裸的多项式求逆。
T2,字符串匹配,翻转A串,0变成-1,1还是1,乘出来相同的就是1,不同的就是-1,然后手算一下就好了。貌似wq用bitset水过去了。。。$O(\frac{n^{2}}{32})$十分优秀。
T3,不错的数学题,推一下式子吧,我们发现要求的就是${a*(a-1)|n}$&&${a*b|n}$的方案数,我们考虑对于一个符合条件的$a$,那么$b$要是$\frac{n}{gcd(a,n)}$的倍数,所以共有$gcd(a,n)$种方案。这样能拿到20分。(抄题解了!)在上述过程的基础上继续推导,由于 $gcd(a-1,a)=1$,故 $a-1$ 和 $a$ 必然包含 $n $质因数分解中不同的两部分,设其为$p,q$,有$pq=n$,设$a=k1p$,$(a-1)=k2q$,有$k1p-1=k2q$,等价于 $k1p≡1(mod q)$,枚举$ n $以内所有可能的$ p$,由于$ p$,$q $互素,故$ k1p(k1p<n→k1<q)$遍历整个 $mod q $剩余系,方程有唯一解,故所有$<n$ 合法的 $p$(满足 $gcd(p,n/p)=1$)都会对答案贡献 $gcd(p,n)=p$。结论:设 n 的标准分解式为$\prod{ pi^{qi}}$合法的 $a$,$b $二元组个数$R(n)=\sum_{d|n,d<n,gcd(d,n/d)=1}d=\prod{ (pi^{qi}+1)}-n$,$R(n)+n$ 为积性函数,故可用欧拉筛法 $O(N)$预处理所有的 $R(n)+n$,然后 $O(N)$求和。这样就有50分了!后面是我自己推的式子,我们发现现在要求$$\sum_{i=1}^{n}{\sum_{d|i,gcd(d,\frac{i}{d})=1}{d}}$$
设$t=\frac{i}{d}$,原式$$=\sum_{i=1}^{n}{\sum_{d|i}{\sum_{k|d,k|t}{\mu(k)\cdot {d}}}}$$
$$=\sum_{i=1}^{n}{\sum_{k^{2}|i} {k \cdot \mu(k) \sum_{d|\frac{i} {k^{2}} }{d} } }$$
$$=\sum_{k^{2}\leq n}{k \cdot \mu(k) \sum_{i=1}^{\lfloor \frac{n}{k^{2}}\rfloor} { \sum_{d|i} {d}}}$$
$$=\sum_{k^{2}\leq n}{k \cdot \mu(k) \sum_{d=1}^{\lfloor \frac{n}{k^{2}}\rfloor} {d\cdot \lfloor \frac{n}{k^{2}\cdot d}\rfloor}}$$
然后就可以$O(\sqrt{n})+O(除法分块)$了
3.7
今天炸的突然有点感觉了。可能这是真的努力却失败的心情吧。srs好神啊!!!
考试时,先想T1,没有注意到a是连续的这样一个条件,发现怎么都要$O(n^{2})$,于是写完30分暴力就去看T2,想了想,好像可以LCT维护一下子树最长链,于是一直在写,然后一直在调,失败,心态爆炸,最后T3暴力写了个搜,期望得分0,实际得分0。而且今天的题应该来说都是自己所擅长的,T1的树状数组,不难想也不难写。T2就是一个dfs序贪心。T3是矩阵乘乱搞。然而今天却是炸的很惨的一天,也许是和东师大联考乱了吧。这场考试太棒了!
T1,我们可以枚举c,发现每个b所能做出的贡献一定 是一段连续的区间,于是就可以树状数组维护了。
T2,我们发现选一个节点时,一定还选了他的最长链的儿子,和其他儿子没有关系,所以我们把他的那个儿子和他的权值合并,最后直接取前k大的即可。
LCT也可以过,要维护splay子树中的虚子树信息。
T3,发现可以直接邻接矩阵快速幂乱搞,我们搞出一个2*n阶的矩阵,左上角是正常的邻接矩阵,右上角是空矩阵,左下角和右下角都是单位矩阵,直接快速幂上战斗机就可以了。
吸取教训,来日再战!
18.3.9
开场看T1,想了一会,好像是网络流???后来发现二分加贪心就行。写,一遍就拍上了。看T2,期望??只会20分暴力,写,过了样例,输出了一些数据,发现每动一次x[i]=x[i-1]+x[i+1]-x[i],然后写了一个40分模拟,再看,发现好像有循环,而且长度不会太长!暴力找了一发循环节,又想了一会,没想到正解。看T3,woc,又是原题,好像又是一道很恶心的,写吧,写了快2h,跑过了大样例。最后看了一下T2,好像100不难想,但是没时间了。觉得270很稳。然而,,,70+70+85=225 rank4,T1怎么挂了??二分右端点设成m了,,T3怎么挂了??被卡常了。。。T2好像我的复杂度不对。。。然而只有T2估分正确了。ccc。
T1,二分加贪心,也可以不二分,就是贪心去掉人最多的项目。我写的二分。md,考试时右端点设成了m,gg
T2,40~70分拿到之后,发现这个东西每次修改就是交换前后两个差分数组,然后跑出来每轮的循环节%一下就可以了。
T3,原题,自动机优化dp。
恩,就这样。少犯低错多拿分。
18.3.10
老吕好像说今天的题很难,好像确实是这样。开场看T1,这,,这不是很简单的数位dp吗,枚举长度不就好了,然而一直没写出来,后来写了个暴力,发现了一些小规律,就致力于打表,打了3h表,觉得能拿70分,看T2,三角剖分!平面图?然而我不会啊,发现bfs能水30分,就写了,写完又想了想dp,没想出来。。看T3,随机树,求所有奇数条边路径的中位数之和,这不是主席树题吗,算了一下,好像能拿30分,懒得写了,写了个大暴力,觉得还是有20分的。70+30+5=105 rank3,T3gg,桶是个好东西。T2的分治真的没想到啊,T3利用树高期望暴力乱搞,T1下午改了改暴力就过了。
T1,暴力!发现一个合法解的后缀也是合法解,乱搞就好了。
T2,分治,每次找最中心的线,分治下去,直到一个三角形,对于每个块bfs,存到两端点的距离。分治要彻底!
T3,考虑从小到大插入每条边,插入的权值为1,未插入的权值为-1,f[i][j]表示i的子树中到i距离为j的方案,每次修改暴力爬父亲,同时统计答案,因为树是随机的,所以复杂度是正确的。
还要努力啊!!!
18.3.12
逆袭成功?开场看T1,7000,直接爆搜啊,好像会出环,记录一下不就好了,写了90min,过了。然后去想T3,想树套树,失败,KD树,失败,发现暴力五万没准能过,于是去看T2,20分傻逼爆搜,30分purfer,50分matrix-tree,写。想了想正解,没想出来,去看T3,发现傻逼莫队啊,写,O(log)转移的。写完拿50000的大样例测,1s,2s,,,10s,,,十二秒才出数,GG。100+50+20=170 rank1。多久没打过rank1了,好爽啊。
T1,直接dfs,需要记录当前点是否在环里,或者是否可能在环里。
T2,可以发现,一棵树需要的操作次数就是总边数减去与原树的公共边树,那么上matrix-tree定理,因为求出的是每个生成树边权积的和,那么我们设在原树里的边权值为1,不在原树里的边权值为x,那么最后求出的多项式对应$x^k$前的系数就是有k条非树边的方案数。但是这样复杂度不够优秀,于是我们考虑插值或者高斯消元,我们强行代n个值进去算出对应的答案,然后就可以$O(n^3)$求出原多项式了。
T3,好神的一道题,正解是主席树and树状数组。首先我们对于每个点求出他后面大于他而且可能对答案造成贡献的,因为$a_{i} \leq a_{p} \leq \frac{a_{i}+a_[j]}{2}$,所以总点对数是O(nlog)级别的,然后我们将询问按左端点从大到小排序,随之维护一个指针,每次将其对应的点对插到树状数组里,树状数组维护最小值就可以了。
保持状态!
18.3.13
再次GG,开场看T1,并不会做,于是看T3,发现枚举一个然后lucas就有50分,写完想70分,没想出来,看T2,发现30分直接暴力+单调栈就可以,然后写,最后去看T1,还是一点不会,硬dp吧,然后又把链的10分写了,最后又回去推了推T3,没推出来。50+0+50=100 rank8,T2爆零??,woc,还要模!!真的会出现忘记模这种事情啊,我以前一直以为这样眼一定是瞎了。。。好吧,我瞎了。。加上30rank4,也是GG啊。
T1,先考虑链上的情况,答案就是序列长度减去最长上升子序列,那么树上的就是树的大小减去最大的小根堆的大小,然后考虑40分的dp,f[i][j]表示以i为根的子树,堆顶权值大于等于j的最大小根堆的大小,然后子树直接合并就可以。但是这样时间复杂度不合法。我们考虑差分最大值,加法还是可以一样做,更新也可以直接做,在上一个处减一就行了。好骚啊。差分最值的操作真的是第一次见。
T2,应该是最简单的一道题了吧,我们还是考虑从小到大插入每个数,每个a中的区间在ta中会对应若干个区间,又会在tta中对应若干个若干个区间,于是我们一个个点亮每个点,他做出的贡献就是tta中新加入位置的个数,这个可以差分得到。发现贡献就是前缀和和前缀和的前缀和,注意首位要特殊处理。
T3,非常吊的lucas应用,首先我们发现如果硬组合数的话没有什么规律或者有用的性质。于是我们考虑转化一下条件,设三种走法分别走了a,b,c步,a+b+2*c=n,a-b=m,等价于a+c=(n+m)/2,b+c=(n-m)/2。于是我们枚举c,设n=(n+m)/2,m=(n-m)/2;我们需要算出C(n+m-i,i)*C(n+m-2*i,n-i)*C(m-i,m-i),这样还是不是很优美,于是我们再变一下形,利用已知量,就是C(n+m-i,n)*C(n,i),我们发现mod不是很大,于是考虑lucas,我们在p进制下进行数位dp,从低到高枚举i的每一位是什么,但是这样的n+m-i的该位可能小于0,这是不合法的,但是这种i是存在的,这时候我们就需要从下一位借位,然后dp数组就记录是否借位就好了。
细心,细心,再细心!
18.3.16
妈的,昨天上午考的试,现在才tm改完题,真tm爽。
T1,正解要用pick定理,写的O(n^3),就是枚举三角形的外接矩形,然后算被包含点的和。
T2,很优秀的dp,首先就是我上午说的那个式子,对于断点前的每个后缀sum[0]>sum[1],断点后的每个前缀sum[1]>=sum[0],否则易证该断点是不合法的。然后就是对于贡献的转化,len*y可以看成先在整个非下降子序列中任选一个元素,再在子序列的1中任选一个元素的方案数。但是这样我们还是不能做到O(1)遍dp就处理出每个断点需要的所有答案。那么我们考虑这样一个事情,就拿断点前的举例吧。我们从头开始,记录一个cnt,当遇到一个1时,就让cnt=max(2,cnt+1),遇到0时,就让cnt=max(0,cnt-1)。我们会发现,这样做完的cnt如果不为0,那么这整个前缀是不可能在这里成为断点的,因为一定有一个后缀,他的sum[1]>=sum[0],同理,我们可以再倒着处理一遍,这时候就需要满足后面的那个不等式。于是我们再结合上面的选数,f0/1[i][j]就表示以i为断点的最终序列cnt=j时0的那段选0/1个数的方案g0/1/2[i][j]就表示以i为断点的最终序列cnt=j时1的那段选0/1/2个数的方案最后的答案就是$\sum_{i=1}^{n}{f0[i-1][0]*g2[i][0]+f1[i-1][0]*g1[i][0]}$这个转化真的没有想到,但是其实并不是太难想,是我太菜了。
以上。
T3,Trie树哈希+二分。很轻真的思路,但是一开始的转化也很巧妙。就看每个位置向前能匹配几个串,向后能匹配几个串,然后就可以想到前面那个优化了。
思考!
18.3.17
是放假所以没有深入思考还是考试策略出锅导致考试崩溃呢?
先看T1,一眼网络流,两眼最小割,三眼不会做,打了个暴力就没再想,看T2,貌似不可做。看T3,LCT,在cdqz见过,想写,写写写,写了1h发现自己不会统计答案,yy了一发,失败了,就打了个暴力,最后觉得T2可能比较好推,于是一直推T2,然后就GG了。
T1,网络流加反向inf边,cdqz原题?忘了。
T2,比较套路的计数题,就是枚举1号点所在联通快大小。对于计数题,思维很弱。
T3,lct,统计答案只需要线段树维护dfs序,dfs序即使换根也可以通过讨论正确维护子树信息。
努力!
3.19
昨天晚上打了UR17,十分滑稽。
考试看了一遍题,感觉T3很好玩,就去看T3,发现有10分是白送的,就写了,然后就不会求一些奇怪的期望了,然后又随机乱rand也没发现什么规律,最后又写了两个特判就跑了,再去看T2,还是不懂让干什么,发现外面的提问都是在问T2,于是就去看T1,发现一定是一条链,数据范围有给链的??又证了一遍,发现的确就是一条链,有毒,还有数据是保证字典序最小,不会又是所有数据都满足吧,证了一下也没证出来他不对,就小范围暴力链上dp,大范围跑贪心字典序,发现大样例能过。觉得挺吊。最后去看T2,还是不明白,瞎dfs了一遍,觉得能拿5~20分。然而我却忘记了这是UR,40+5+10=55 rank20,由于我最后手贱又交了一次,导致rank--。rating竟然涨了!!
T1,我没有弱智的发现最优解并不一定是字典序最小,f[i]表示权值为i的根消到0的最小花费,不算自己。要把都有的位的代价单独算
T2,二分答案,f[i][j]表示能否在限制内到达i点j边,然后bfs转移就行了。
T3,咕咕咕
3.20
考试继续,先看T1,傻逼贪心?发现不太对,前面的可以贪心出来最优解,后面的乱搞了60分做法,一直在想怎么优化,没有去想怎么贪心。之后去看T2,01Trie上dp?不会,打了20分暴力,去看T3,只会爆搜,写了20分爆搜,再去看T2,这tm不就是个2-sat吗,但是好像边数是O(n^2)的,不管了,先写吧,写了好久调过了样例,和暴力拍,小概率出错,发现好像加边错了,然后就一直在yy加边,最后交了暴力和2-sat的混合版。最后发现T1好像要开long long,但是没时间改了。233。20+80+16=116 rank2,T1炸int了40,T2假的2-sat有80分,好像因为没有捆绑测试,puts("YES")有60?T3有个点T了。GG,下午把2-sat搞懂了,想了半下午T1,刚了半下午T2,看了一晚上T3。233
T1,分别贪心搞出第i件衣服洗完烘完的时间,ans=max(a[i]+b[l-i+1]),我们考虑把洗的时间的柱形图放在下面,烘的时间的柱形图反着放在上面,然后拼在一起,合着的就是正好的答案,感觉说不清楚,至少我感觉现在我明白了,每个柱子可以看成一个机器的前缀和。
T2,Trie优化2-sat建图。对于Trie树上每个节点,需要有两个点来表示是否出现过他的前缀,然后我们对于每个字符串,新建一个其自己独一无二的Trie树节点,同时把原来对应相同节点的字符串的新节点抻成一条链,然后父子间建边,父子再分别和儿子对应的字符串连边就好了,字符串的对应图论节点就表示是否选他,如果没有问号,就连1->0的边,表示强制选0,2-sat的反向边是说的逆否命题。
T3,牛逼题。
dp,f[s][x][p1][y][p2],表示线索x(向右走)的p1后的所有位匹配成功(包括p1),线索y(向左走)的p2前的所有位匹配成功(包括p2),现在已满足和正在满足的线索的集合为s转移有两种,一种是直接添加数字,对于x线索,新加的数字要么是a[x][p1+1],要么在a[x][1]~a[x][p1+1]中出现过,此时p1不变对于y线索,新加的数字要么是a[y][p2-1],要么在a[y][1]~a[y][p2-2]中出现过,此时p2不变,另一种是换线索,(x,p1)->(x1,0),或者(y,1)->(y1,p3),更换x时,需要保证把x1接上后a[x][p1]~a[x][len]都满足,更换y时,需要保证把y1接上后a[y1][p3]~a[y1][len]都满足,一些边界写的不太清楚,自己体会吧。
思考!
18.3.21
开场先看T1,这不是cf那道神题吗??不会做啊,一会再写暴力吧。看T2,裸dfs序啊,线段树维护一下就好了,码码码,码好了,样例不对,发现贡献算多了,这个好像给维护一个前缀和啊,平衡树!n^2的啊,启发式合并!写写写,怎么搞答案,二分?直接在平衡树上跑不就好了!写完过了样例就拍上了,还拍出来暴力一个错,觉得int很稳,就没有define int long long,看T3,什么玩意,看不懂题啊,写暴力吧,好像特判一下就可以了,写了30分,发现T1暴力还没写,赶紧写完过了样例就交了。5+85+30=120 rank4,T1怎么挂了?tmp写成了p,T2怎么挂了,int×int=long long boom!T3我怎么分最高啊,吊吊吊。2333
T1,枚举凸包最上面的点,将所有n^2条向量按照倾斜角排序,然后依次更新就好了。原来这么简单。
T2,平衡树维护t[x]+dep[x],直接跑就好了,启发式合并。
T3,好吊啊,如果对于两个多项式P^2=A,P是n项,A是2*n项,那么我们对于任意的x值,都会有P(x)^2=A(x)。但是这道题并不是普通的乘法,而是循环卷积。其实我们还是可以把A看成2*n项的,但是这时x的取值就有了确定的限制,需要满足x^n=x^0=1;只有这时候才会满足P(x)^2=A(x)。然后我们发现n阶的单位复数根是满足这个条件的,于是我们把W0~Wn-1拿出来作为我们的x然后这时候我们只需要求值,开方,再插值,就可以得到对应的多项式了。求值我们可以直接暴力O(n^2)做,开方时会出现一个问题,一个复数开方会得到两个复数,这时我们就需要状压枚举每个开方选的数,最后插值我们就可以按照idft(fft的逆变换)的暴力方式,O(n^2)求出对应的系数,然后我们只需暴力判断这个序列是不是都是非负整数就可以了。但是我们发现这样复杂度是O(T*(2^n)*(n^2)),这是我们不能接受的。于是我们再次研究一下奇怪的性质,我们会发现,对于回文的P,A=P^2一定也是回文的,同样,因为(Wi)^k=(Wn-i)^(n-k),Wi求出的值也一定和Wn-i求出的值是一样的于是我们只需要枚举一半点值就可以了,复杂度O(T*(2^(n/2))*(n^2))。
注意细节。
18.3.23
又考试,先看了一遍题,T1不是很清楚,T2好像是数位dp+矩乘优化,T3联赛前达哥出过?先看T3,发现模数可能不是素数,发现70分可以直接lucas+crt乱搞,然后就去看T1,发现30分可以直接暴力,50分枚举一下哪些权值出现了,然后斯特林数,之后就不会了,开始写,写完过了样例,之后去打T3,打完造了几组小数据查出来几个错,最后看T2,打了表,没找出来什么规律,最后交了10分暴力。30+10+80=120 rank5,T1挂了20,为什么呢?n=50 m=4,我写的1<<n*m,有毒。挂的好惨啊。GG。
T1,定义三个函数
f(n,m)表示n个点,点权是0到2^(m−1)的随机值时所有情况的最小生成树的和
g(S,T,m)表示一边有S个点,一边有T个点,点权是0到2^(m−1)的随机值时所有情况的连接S,T集合的最小边的和
p(S,T,m,k)表示一边有S个点,一边有T个点,点权是0到2^(m−1)的随机值时最小边大于等于k的情况数
然后转移看代码,很好理解。
感觉自己永远想不到这种状态定义和转移方程。思维不够开阔。
T2,这竟然是道数学题,我们发现如果整个的数字是循环节大于1的完整循环,那么是一定不符合条件的,于是我们可以容斥乱搞一下。然后就是一些傻逼结论和杜教筛,正好复习了杜教筛,感觉很不错。如果$h=f×g$,那么$F(n)=H(n)-\sum_{i=2}^{n}{g(i)*F(n/i)}$
T3,求组合数模一个合数的值,我们分解为若干p^k,然后通过阶乘乱搞(把每个阶乘写成a*p^b的形式,a为%p^k意义下的,同时我们需要得到a对于p^k的逆元)搞出来对每个p^k的答案,最后再用crt搞一下就可以了。
思考!
18.3.25
开场看T1,最大密度子图?m=2e5??算了,暴力二分网络流吧,好像会被卡边界,换实数流,woc,为什么这么慢?那我先分出来整数答案,再实数跑一遍不就好了!打完,过了样例,两个网络流就拍上了,看T2,三维几何??貌似不难,搞一个距离,搞一个对称,对称,对称怎么搞?操,不会。先去看T3吧,暴力乱搞,1000一下很稳,打表,发现有的打不出来,然后就一直在打能打出来的。最后打了T2的一个特殊情况。把T3 1500以上的表能打出来的都打出来了。90+0+40=130 rank1。T1 90???卡常+O3 woc A了。T2爆零了,woc,末尾有个句号!操!T3只有40,傻逼出题人故意卡我吧!正解根号算法?没深入想。
T1,网络流,我们发现答案是$\frac{\sum_{i \in S}{sum[i]} - cut(S)}{2* \sum_{i \in S}{a[i]} }$ sum[x]为x连出的边权总和,cut是连接S和外面元素的边。然后就可以按照文理分科的套路去二分答案了,就是与S相连代表选,与T相连代表不选,再处理一下每一条边就可以了。
T2,计算几何,两点法表示每条直线,然后有一些高考数学的小技巧,考试时感觉很乱,其实是思路没有理清楚。其实也不麻烦。
T3,就在暴力的基础上改成枚举根号以上的因数,根号以下的状压dp,很巧妙的根号思维。
思考,思考!
18.3.26
先看T1,三维的约数个数和?不会,只会暴力,写了一个40分上去,去看T2,发现好像O(n^3)dp很简单,梳理了一下思路就开始打,然后就一直在打,大概还有90min的时候,看了一下T3,看错题了,看成一个点集了,没有思路,继续死磕T2,然后失败,最后T3puts("25"),竟然拿到了10分。GG。40+12+10=62 rank11,又倒数了,这次是考试策略不太对,而且对题目的估计出现了偏差,觉得T2是最可做的,但是我的思路想偏了,记得这种dp的题我的思路如果一开始不对,考试基本就gg。还有就是对于时间的分配和审题的问题。以后都要注意,应该省选前也没几场考试了,珍惜,努力吧。
T1,不是很难,就是三维的约数个数和。式子懒的写了,就是枚举i,在枚举j和k的gcd,然后调和级数枚举j,k,暴力判断j,k和i的gcd等于1
T2,f[i]表示长度为i的非降序列的方案数,发现答案就是i的方案减去i+1对于i贡献的重复的东西。这个dp其实并不难想,也不是很坑或者很绕的题,但是我却想错了,而且整场考试浪费在这一道题上,可能说浪费有点不合适吧,但是我却因为这一道题,失去了其他两道题的得分可能,我想的错误做法是dp时直接统计方案数,其实一种序列做出的贡献是可以直接计算的,正解说的按照长度来统计贡献如果说需要思考一下的话,那么zzh的那种统计序列长度和违法个数可以说是比较容易想到了,反正我那种dp是绝对错误的,我的贡献是有很多条件的,而我又没有办法去限制这些东西 ,GG。不能再GG了啊!
T3,裸的半平面交,二分答案,发现去掉连续k个一定是最优的,于是直接半平面交判断是否有交集即可。
珍惜。
18.3.27
今天,怎么说呢,两场考试都是因为一些特别小的细节挂了,太大意了,以后要认真检查代码。肉眼差错很好用!
上午的考试,先看T1,一眼傻逼容斥,写着写着发现不太对,有毒,然后打了爆搜就先弃了,之后看T2,。。原题?这个题我记忆很深刻,之前的分治不彻底,所以在bzoj上TLE,这次很轻松不到1h就写完了,然后看T3,百步穿杨???woc,之前没做,现推吧,发现很水,然后写写写,还有90min时写完了,感觉200分很稳,然后看T1,写了个60分暴力,然后就结束了,T3爆炸40分,调了半个晚上发现网络流初始化e=1。T1就是很神的状压dp,不太会。GG 60+100+40=200 rank8
下午接着考试,先看T1,LCT?正想怎么维护信息呢,发现只有加边,而且好像有些很好用的性质,然后写,写完了,样例WA,查错,又WA,手玩,发现有一个环的情况,然后就不会了,打了60分暴力,T2,傻逼树形dp啊,发现不同距离贡献不一样,没法写了,yy了一下链上的贪心,和小暴力拍上了。看T3,之会log^3傻逼做法,先写,还有不到半个小时想到了一个动态开点线段树做法,不虚,写,最后没调出来,gg,吃完饭回来一眼发现没有写a[x]=y,交上去就A了。 55+40+50=145 rank9
怎么天天炸啊!!!!!!!!!!!!!!操!
我要进省队,我要进集训队!!!!!
18.3.28
又考试,先看T1,这不是昨天的T2放到链上吗?n=50000???写了60分暴力就先弃了,暴力出奇的稳,一遍过大样例。看T2,我赌是傻逼网络流,然后就开始yy费用流,不会,又yy最小割,不会,好像和原来达哥出的一道题很像,应该是分开加不同的费用的边,还是没有yy出来。看T3,傻逼数据结构,写完暴力想没有修改的,好像原来做过一道这样的,不会。又想链上的,还是不会。然后回去打T2的爆搜,打完就考完了,wq没看见11点考完,哈哈哈哈哈。60+16+20=96 rank7,一天前进一名,到省选我就rank1啦!
是时候补补这两天的题了。
18.3.27 morning
T1,这个dp太牛逼了,设f[i]为长度为i的上升序列的末尾的最小元素,那么我们设F[s][s0]为当前所选集合为s,s的f数组中包含的集合为s0,这样就可以枚举后面的元素直接转移了,我们按照a序列的顺序加入,这样就能保证序列是合法的,最后我们只需要将s0大小为m的统计起来就好了。这种dp原来从来没有遇到过,非常巧妙,一维是当前所选集合,一维是该集合的某个信息数组的集合。
T2,原题,但是我这次好像打得比较漂亮,放上代码吧。
T3,百步穿杨那道题,一模一样,考场上yy出来了,但是网络流e=1,gg,就是把每个格子拆成一个横着的,一个竖着的,然后竖着的炮我们反着连,横着的炮正着连,最小割,连到每个点就代表选他,边权就是那一行(列)的最大值-权值。然后相交的位置我们连一条inf边就可以了。
18.3.27 afternoon 这场是树专场啊
T1,其实是个大分类讨论,就懒得写了。简单说一下吧。如果有一个度数为3的点了,那么答案只能是他和他周围的三个点,我们暴力维护去掉这四个点的图,然后判断。否则度数都小于3,那么只有可能是链或者简单环,我们发现如果有一个以上的环答案一定是0,那么出现第一个环时,我们搜出环上的点数就可以了。
T2,树形dp,f[i][j]表示i去的关键点是j时以i为根的子树的代价总和,然后关键点的代价我们在他和他父亲的关键点不同时才算上,这样的贡献是正确的。感觉自己dp好弱啊。操。
T3,直接对于每个权值离散一下然后树剖+动态开点线段树就可以了。
18.3.28
T1,决策单调性,然而我现在并不知道怎么乱搞。
枚举决策点,如果i的决策点是j,那么i后的决策点都不可能在i之前,因为增长的代价要更多。然后我们对于决策点维护一个栈,当新加入一个决策点时,我们二分出他从哪里开始是最优的,然后把他加进栈,然后直接更新就好了。
T2,网络流,十分优秀,把每个点拆成三个,一个是他本身,另外两个分别代表横向连和纵向连,然后把费用拆开附给4条边上,真吊。
T3,对于序列分块,每个块维护每条边的经过次数还有所有点的答案,然后dfs序维护后者,每次修改边就相当于是区间加,然后单点查询。
18.3.29时间真tm飞逝啊。
考试继续。先看T1,多重背包+完全背包?n这么大?m倒是很小,打了个表,发现后面的直接组合数就可以了,然后陷入沉思,yy了个二进制分组,发现贡献会算重,然后就弃了。看T2,生成树?n这么小,打完暴力想60分,以为n很小可以直接加完边break呢,后来发现他给一样的边就gg了,之后发现可以直接在线段树上维护该区间可能的答案,然后把每个区间的搞出来最多nlogm的,之后在暴力kruscal一下就好了,打完就拍上了,好久没有A过题了,好爽啊,本来想改成归并排序呢,发现跑得挺快,就懒得打了。看T3,只会30分,发现60分直接O(n)判断修改就可以,O(n^3)很稳。最后发现T1好像可以FFT优化,然后赶紧去打,结果没有模还判错了,白丢了30分,其实现在怎么丢的分都不是白丢,不过要长记性,不能老犯同样的错误,挂在同一个地方,40+100+60=200 rank5,T1普及组前缀和优化dp,mdzz。T3倒是真的fft。
T1,暴力dp,前缀和优化转移,这么傻逼的题我怎么就想不出来,操。
T2,线段树+kruscal。
T3,把矩阵和方阵拆成一条链,然后先fft算出每个可行的位置,在搜出真正的答案,最后在fft统计答案。
加油,加油,加油!!!
3.30
接着考!先看T1,这不是傻逼hash吗?写!刚准备写,看了一眼样例,发现不对,然后按照样例的题意yy了一发,失败了,然后祈祷是样例错了而不是题面错了,然后去看T2,发现只会半径都相等的,然后看T3,只会暴力。然后老吕来了,纠正了T1的题面。就是我yy的那个题意,然而我并不会做,然后想了一个平衡树维护当前的匹配长度,刚准备打,发现这tm不就是kmp换了个匹配方式吗,然后kmp忘了怎么打了,现场yy成功,打完样例1A,很稳,然后就拍上了,然后造了组极限数据发现答案都一样,我也不知道为什么,但是暴力也是这些数,就没管,看T2,yy了一下n=3的做法,发现可以固定一点,二分一点,O(1)确定一点,然后一直觉得是状压转移某一条边出去,发现并不是这样,之后去把T3的40分暴力打上了,打完发现60分好像可以直接线段树,就写上了。100+40+40=180 rank1,T3不知道为什么挂了20分,long double慢?我又是rank1啦!继续加油!
T1,kmp,匹配从原来的两个字符相等变成了上个出现位置距现在的距离相等,然后就直接搞就好了。
T2,拉格朗日乘数,求一个多元函数在若干限制下的极值,然后二分参量mid。
T3,把相乘换成指数的相加。每个权值线段树维护一段权值连续的区间,然后每次就是将两边不完整的线段树分裂,将中间的线段树合并,可以发现每个节点只会贡献一点复杂度,所以复杂度O(nlog)是合法的。
3.31
先看T1,傻逼数据结构?yy了一会没成功,一会想出来一个乱搞做法,觉得能A,就写了,发现随机数据很稳,然后证了一发证出来是错的。然后又想了一会,没想出来。然后就弃疗了。看T2,暴力都不会写。然后看T3,也不会。手画了一下,发现就是个环套树,然后直接中间polya不就好了,然后十分开心的打完了一个不完整的正解。然后只剩30min了,赶紧又看了一遍T2,发现可以搜每个点到首都的距离,然后赶紧写上了。60+70+0=130rank3。T3根本没有考虑子树同构,子树同构就tm是个化学树啊!T1骗分效果一般,T2暴力70,吊吊吊。
T1,考虑一个点最优的转移点是单调的,于是决策单调性!
T2,网络流。对于每个点拆成n个点,0~n-1,第i个点表示dis[x]>i,连S代表真,连T代表假,然后有边相连的再限制一下就可以了。
T3,除了环的同构,还要计算树的同构,就是一个化学树。
今天爸妈来了,看了个小短片,挺感动的,忍住了没哭。努力。
hlhlhlhlhlhlhlhlhlhlhlhlhlhlhl
四月又考了4场模拟赛,一次第一三次挂。懒得写了。
省选来了。
还可以继续搞,挺爽。