「集训」2020集训记录

  01.02 「数学一」

    T1因为不会exlucas只拿了80

    T2失智没想到异或FWT,后面的倍增求鬼畜数列前缀和了。

    T3是个特别神的期望?的确是枚举最后一个拔掉的位置,然后区间dp

     如何让区间dp方便地统计答案同时转移?当然是弄出一个优秀的状态定义了

     (也就是只要和出题人想到一块就AC否则暴力滚粗)

     定义区间右端点是区间最后一个拔掉的点,枚举倒数第二个

     这样对于左右子区间来说,他们的右端点恰好也是他们中最后一个拔掉的,

     于是可以直接借用他们的贡献来计算。

  

  01.04 「数学二」

    T1杜教筛全场切而我差点被卡常

    T2神仙结论题,由于结论证明不了也理解不了,心情差到不想写代码

    T3疯狂化柿子套FFT,太过丧心病狂,于是想打多项式多点求值

     然后调不出来。

     利用$val^{2ij}=val^{(i+j)^2-i^2-j^2}$

     把巨型柿子变成若干次FFT

 

  01.06 「数学三」

    T1毒瘤dp,又是构造一堆函数...

     其实本应该想到的,毕竟已经做过「最小生成树计数」,应该意识到在这个完全图里

     代价最小的一组点要放在一个联通块内考虑/代价最大的边必定只出现一条(来沟通两个代价较小的联通块)

     如果意识到这一点,就能想到把F函数递归解决,大概也会引入G函数

     G到P的转化不是很好想,P数组在四维上的不断削减也不是很好想。

    T2思维题

     如果你也是打表之神,打表就行了

     这道题是从特殊入手,即考虑一类特殊的数-出现循环节的数。

     如果出现循环,那么把第二次/最后一次循环的开头顶到最前面,字典序一定小于X

     所以答案只在不循环的数中产生,但是不循环的数也不一定符合要求

     具体来说,循环同构的一组n位数,只有字典序最小的那个数才能成为X

     所以问题变成了求多少内部没有循环但互相循环同构的等价类数

     等价类计数?不不不把这个等价类数乘个n就变成数字数量了

     然后就能用莫比乌斯函数枚举循环大小容斥求了,后边还要莫比乌斯反演和杜教筛就不是很思维了

    T3要求的$ans=\sum\limits_{i=0}^{n-m}F(i)*((C_{n-i}^m)^2-(C_{n-i-1}^m)^2)$

     组合数部分相似,设$A[n]=\sum\limits_{i=0}^{n-m} F(i)*C_{n=i}^m$

     则$ans=A[n]-A[n-1]$,又发现A的求解是一个卷积形式

     卷积就想到多项式,果然A也是一个次数为$O(m)$的多项式

     那只要得到这个多项式足够的点值就行了,得到点值可以直接利用这个未展开的柿子

     组合书递推求,只需要得到F足够的点值

     然后给定的F点值是从0开始连续的又可以O(m)插值,于是解决。

 

  01.10 「模拟四」

    T1我猜暴力乱搞可以A,于是打了set优化暴力!

     出分一看,黄的!

     点进去,8分!(滑天下之大稽

     发现锅了,只有合法情况下才让指针++,只要有一个不合法的就死循环了

     欲哭无泪,开始魔改,这时DC上去讲他的乱搞暴力,我悲催地发现我俩思路差不多然后他AC了我T8..

     改完一交,28!(?

     仔细撕烤了三秒钟,发现没开double,用int算的1e16

     改完一交,76!(泪

     再乱搞几下,A了...

     然后T3再把x替换成dfn[x]又加了20分,成赛后gtds了...

     \泪 \泪 \泪

     圆形没交!也就是说,对于一个横坐标,每个(半)圆形对应的纵坐标的相对大小不变!

     而且从一个横坐标的视角来看,一个圆下方紧邻的另一个圆一定是它的兄弟或父亲

     于是把一个圆拆成两个半圆,平衡树+扫描线在一个圆加入时找到他的父亲

    T2一个大神题,赛后被扔了一脸的结论然后十分懵逼

      首先飞一个玄学结论,只要求一段数的lcm就行了

      然后再飞一个玄学构造,构造一个神仙数组

      然后这个数组在扩展到下一个数的时候只需少量修改,可持久化数组预处理掉

    T3 ?

  

  01.11「模拟五」

    T1友好的贪心

    T2拉格朗日爆♂插(或者伯努利数)

     背伯努利柿子:$$\sum\limits_{i=0}^n C_{n+1}^i B_i^-==0,B_0==1$$$$B_1^+=-B_1^-,B_i^+=B_i^-(i>1)$$$$\sum\limits_{i=0}^{n-1}i^k=\sum\limits_{i=0}^k C_{k+1}^iB_i^-n^{k+1-i}$$$$\sum\limits_{i=1}^{n}i^k=\sum\limits_{i=0}^k C_{k+1}^iB_i^+n^{k+1-i}$$

    T3我们可以考虑在每个右端点产生的答案,然后用线段树可持久化一下就行了!

      这个答案是如何产生的呢,当然是“新加入的字符形成的后缀在之前出现过”而产生的

     也就是后缀自动机的fail树上祖先啦!

     考虑插入第n个字符时,fail祖先上一个末尾位置在$P$的节点(越右越优)

     设节点的len值最大为$L$(越长越优)

     则当n作为右端点,$[1,P-L+1]$作为左端点时,答案一定不会小于L -----线段树区间对定值取max

     当[P-L+1,P]作为左端点时,答案一定不会小于一个等差数列-----线段树区间对等差数列取max

     后一种有点麻烦?可是公差永远都是-1,所以还是对一个数(首项)取max

     于是暴力跳fail树,就能A啦!(雾)

     这不是$O(n^2logn)$吗?

     发现暴跳fail树和LCT的access操作很相似(完全一样)

     于是LCT优化上述暴跳即可,复杂度就是LCT的复杂度

     注意的问题:更新答案只用需要保留的部分,打标记之前先splay一下,复制节点之前保证标记已经下传

$$extra:skyh的头撑爆cnblogs祭$$「集训」2020集训记录_第1张图片「集训」2020集训记录_第2张图片

$$skyh的邪(qing)魅(mie)一笑$$

 

01.13 模拟6

  简单场,能力不行,干翻了

  T1 根号维护信息+等比数列求和

    几种简单根号算法:

      按照信息量与根号n的关系分类,维护大点,暴力小点

      启发式合并,一条边两端点较小的一方暴力,去维护较大的点

      残量图上跑生成树,每棵树可以$O(1)$维护,那么跑出一片生成森林来就行了

    根号?

      小点信息量不超根号,暴力复杂度正确。大点数量不超根号,维护复杂度正确。

      完全图时,每个点被合并$O(n)$次,复杂度$O(n^2)$,

        可是边数为$m$时只能支持根号m大小的完全图,正确。

      完全图时,每棵树大小$O(n)$,边数$O(n)$,森林中树数$O(n)$

        可是只能支持根号m大小的完全图,复杂度正确。

    本质都是将所有点按照一定依据分类,根据点的种类把要维护的信息分类,

      提前维护或者现时暴力,最小化代价。

  T2 sbdp,没想到贪心,T成暴力

  T3 sbt,首先意识到一条lis和一条lds最多相交于一个点

    则一条合法的lis保证f=路径上的点占用的lds数量

    可是tot太大了存不下,考虑模意义下存储,可是又没法比较大小了

    但是模意义下任意两个不同的数一定有一个不等于tot,

    所以对每个点维护两个不同的f的转移路径,然后从一个合法的往前跳就行了

    注意事项:有个p的注意事项只要一直分类讨论直到变成一个sb就好了

 

01.14 模拟7

  T1原题不会,凉了。

    差分。区间操作变点操作。做一次,不会一次。

  T2线段树or分块,整块$O(1)$,边缘暴力

    代码难写,难死kx,劝退yxs。

  T3强题

    假设我们现在会60分

    ......

    (以上略去了一万句yxs的口胡)

    还是复读skyh大神吧。说错了请skyh神不要批判我。

    

    康这个转移方程:$$f[i]=max(f[i],f[i-1]+contr(x))-(contr(x)=a_x*(i-1)+b_x)$$

    $f[i]$一共两种来源,上一层不变地拿下来或者$f[i-1]$加上$x$的贡献。(贡献contribution)

    然后什么也发现不了,60分滚粗了!可是生活还得过!

    猜测存在一个分界点,前边全是一种,后边全是一种,打表发现正确。

    证明:

      设第x层处理完毕时$g[i]=f[i]-f[i-1]$,显然$g[i]>=contr(x,i)$

      第x+1层更新时选择第二种来源,可推至$contr(x+1,i)>contr(x,i)$,

      而因为$a_{x+1}>a_x$,

      若$$contr(x+1,i)>contr(x,i)$$$$contr(x+1,i+1)>contr(x,i+1)$$

      必然成立

    又发现$f[i]=\sum\limits_{j=1}^i g[j]$,是不是维护一下$g$就行了!

    事实证明是的,因为skyhA了每次二分找到$g[i]<=contr$的临界点,然后维护一下g就行了

    具体来说,临界点前边是没变化的,临界点处插入了一个$contr(x,i)$,临界点之后的变化为:$$g'(i)=f'[i]-f'[i-1]=f[i]-f[i-1]+contr(x,i)-contr(x,i-1)=g(i)+a_x$$

    支持查排名,动态加点,区间加法......仔细撕烤,最好是平横竖。

 

01.15 模拟8

  成就「一天一考」get

  T1一看名字就怂了,让我想起之前的某题

    还要维护操作次数?不是很好做,打了30分走人了

    其实也幸好没浪费太多时间,因为我不可能想到判0,写也白写

    为什么没有尝试分块呢,如果尝试分块的话应该也能顺水推舟地想到一些处理办法的吧

    试也白试因为我大概不会用暴力去对拍分块的一定找不到错

    所以以后不要随便弃题多对拍,再次告诉自己。

    很强的在线做法(某某秒切,还说很显然

    分块,边缘暴力重构没什么好说的,怎么维护整块的标记

    加法一定作用于所有元素,直接打上

    取max只能作用于特定元素,也就是初始值小于某一个数的所有元素

    那么根据加法标记平移一下映射到初始值的值域上,如果小于前一次的取max

    那这一次没啥用,忽略掉;否则压栈

    查询时,二分找到对应位置,然后在此基础上加上加法标记,

    还可以根据找到的位置得知被操作了多少次,很强。

    离线算法弃了

  T2部分分很肥,但是最后只拿到了送温暖的13分

    subtask2锅了没什么好说的

    subtask3对拍出错误,改正后交的还是错误代码,没什么好说的

    主要还是时间给了T3太匆忙了。

    subtask1是出题人满满的善意,13分白送,subtask2可以bfs

    考虑k是偶数,如果路径长度只有奇数那么达不到0,但是可以达到1

    如果subtask2没锅,已经65了

    进一步考虑,一条路径的最小代价不可能超过和k的gcd,至少可以一直刷

    而这个猜想不够普遍,想的有点偏了。

    

    考虑一个联通块,它能产生的路径长度一定是所有边的gcd的倍数

    设g是所有边权和k的gcd

    考虑遍历所有的边再回来,由于可以随意调整每条边经过的次数是2的几倍,

    则答案可以不断地加上2*g来微调

    如果k是g的奇数次倍,那么随便找一条路径不断加2*g一定能变成0

    否则如果想变成0,必须满足找到的路径也是偶数次倍,找不到的话,答案只能是g

    怎么找呢?其实并不关注边权的具体值,而只要知道除了g以后的奇偶就行了

    如果g不能把他们的gcd中2的次数除尽,那显然只有偶数了

    如果能除尽,由于其它的质数都是奇数,再除什么也影响不了奇偶性了。

    所以先把2的次幂除尽,根据k来判断直接输出0还是输出染色情况。

    

  T3网络流

    过不了样例,萎了,只能状压了。(然后玄学乱搞,优化一下状压

    不行有点虚,我还是只对n>15的测试点乱搞好了

    然后莫名AC了?数据真水

    

    我的乱搞是伪的,是根据瞎猜来优化对点的状压

    从判断点集的合法可知,如果从有T指回S又到达T的边,一定不合法

    于是非常弱智地认为点集分割一定是根据拓扑序来的,即在把拓扑序斩成两截

    这是没什么问题的,可是拓扑序不唯一啊!又不能枚举所有的拓扑序,于是伪了

    

    所以应该打网络流,get一个新trick

    反向inf边强制不割有前后关系的两条边。

 

01.17

  被提答大神和莫反大神虐翻了!

  T1初始柿子都没列出来。

    不然可能还能救

    多除了,考虑gcd啊!

  T2考试的时候以为自己A了,因为复杂度对的不行

    然后喜闻乐见地WA0了  

    因为没有想到狠猪回来之前去的那头猪可以不在二分图里

  T3神仙提答

    改不动了,%一发DC叭

    真没想过电脑能抗的住1e9个short的20个G占用

    恐怖如斯

你可能感兴趣的:(「集训」2020集训记录)