一句话题解(2021.1)

CF1477F. Nezzar and Chocolate Bars

显然每一段的每个位置切的概率相同,ans=Σ时间t时未结束的概率

容斥有i段>k,枚举每段切m刀,则有

\(\large \sum \prod_i (-1)^i \sum_m \binom{m+1}{i}(\frac{L-iK}{Len})^m\frac{x^m}{m!}\),其中Len=ΣL

其中\((a/b)^m\)就是在里面切m刀的概率,可以等于\(\large \frac{\binom{ax}{m}}{\binom{bx}{m}}\),x->inf,得到\(\large \frac{(ax)^{\text{m次下降幂}}}{(bx)^{\text{m次下降幂}}}\),因为分母无限大所以把下降幂改为幂,得到(a/b)^m

\(=\large \sum \prod_i (-1)^i \sum_m (\binom{m}{i}+\binom{m}{i-1})(\frac{L-iK}{Len})^m\frac{x^m}{m!}\)

考虑C(m,i)

\(\large =(-1)^i\binom{m}{i}p^m\frac{x^m}{m!} =\frac{(-1)^i}{i!}p^ix^ie^p\)

另一边同理,dp得到类似\(px^ae^b\)的东西,要对m=0~inf求[x^m]

\(\large \sum_m[x^m] m!x^ae^b=\sum_m\frac{b^{m-a}m!}{(m-a)!}=a!\sum_m \binom{m}{a}b^{m-a}=a!*F(1)\)

其中\(\large F(x)=x^a\frac{1}{(1-bx)^{a+1}}\),代入即可

直接dp是O(L^3),发现a=b-选C(m,i-1)的个数,所以另一维变为n,时间O(nL^2)

CF1477D. Nezzar and Hidden Permutations

首先显然度数为n-1的点无法贡献,去掉后剩下的就是答案上界,考虑构造得到

在补图上考虑,把补图划分成若干匹配点对+挂在点对上的点,这个求出每个点连出去的mex,如果都没有选就加到点对里,否则挂在点上,最后还没有变为点对就加进去

对于点对(u,v),如果只有最多一边有挂着的点就把另一边提出来,变成x->其余点的形式,然后对剩下的填(1,2),(2,3),(3,4)..(k,k+1),x填(k+1,1),由于x都有边所以不会判断,连出的内部满足,块往外的由于标号连续也满足

如果uv都有就把u-v断开变成两个来构

loj2565. 「SDOI2018」旧试题

用d(x)来代替σ0(x)

\(\sum_i \sum_j \sum_k d(ijk)=\sum_i \sum_j \sum_k \sum_{x|i} \sum_{y|j} \sum_{z|k} [(x,y)=1][(x,z)=1][(y,z)=1]\)

\(=\sum_x \sum_y \sum_z (A/x)(B/y)(C/z) [(x,y)=1][(x,z)=1][(y,z)=1]\)

\(=\sum_x \sum_y \sum_z (A/x)(B/y)(C/z) (\sum_{a|(x,y)}\mu(a))(\sum_{b|(x,z)}\mu(b))(\sum_{c|(y,z)}\mu(c))\)

\(=\sum_a \sum_b \sum_c \mu(a)\mu(b)\mu(c) F(A,[a,b])F(B,[a,c])F(C,[b,c])\)

其中F(A,x)=Σ(A/i)*[x|i]

然后lcm不超n且μ≠0的只有760000左右,建图找三元环O(m√m),具体把度数大的连向度数小的,按顺序枚举连续三个,度数<√m的会算O(m√m),度数>=√m的只会再更大的算到它,每个会被算√m次,一层加在一起算m次所以总次数O(m√m)

ll的神奇做法:https://blog.csdn.net/linli2019/article/details/113096077

设e为质因子次数,\(d(ijk)=\prod(e_i+e_j+e_k+1)\)

\(=\prod((e_i+1)(e_j+1)(e_k+1)-(e_i+1)e_je_k-e_i(e_j+1)e_k-e_ie_j(e_k+1)+2e_ie_je_k)\)

然后对于某个质数p,如果要把(e+1)变为e就等于把d(x)变为d(x/p)

枚举后面选四部分的质数的积xyza,有

\(ans=\sum_{xyza,ayz|i,axz|j,axy|k}\mu(xyz)2^{\text{(a质因子个数)}}d(i/ayz)d(j/axz)d(k/axy)\)

保证积<=n即可限制xyza的范围,同时xyza要互质(用μ判)

直接枚举时间O(n√n),分析见ll博客

CF1463F. Max Correct Set

显然对于一个长p=x+y的合法串,将其复制后仍合法,因为若ai=ai+x=ai+x-p=ai-y,与原串合法矛盾

奇妙结论:存在循环节严格为p的最优解(暂时不会证

然后直接状压

CF1474F. 1 2 3 4 ...

把折线的顶点上下划两条线,画出的2n条线把折线分为n^2个段,直接在段上dp,记录最大值以及方案数

把一行的向上/下两种段分为一类一次转移一类的所有,从后往前考虑以当前段位末尾的转移开头

显然最优解值一定连续,所以用桶维护后面的贡献,枚举段的贡献组合数算,向上的段选连续的向下的段选最多一个

枚举的状态有n^2,往前只会转移到相同的n个,组合数枚举向下段放多少个爆算是n^2所以是O(n^5),把组合数提到外面变为O(n^4),再递推处理组合数可以O(n^3)(需要考虑(C(n+i,m)这种,懒得写

牛客挑战赛47G 子串

对S建PAM,离线询问扫r把r激活,接着把T插进去线段树询问最大r,如果当前的l已经超了那么再往下走长度增加r减小一定不合法,所以超了就往上跳,时间O(|S|+|T|log|S|)

6948. 【2020.01.12冬令营模拟】小 ω 的魔方

一共五种置换:

①不动(1) ②转90°(6) ③转180°(3) ④两个对顶点转±120°(8) ⑤两条对棱的面旋转180°(6)

发现有可能有对顶点互相移,如果有的话一定无法均分,所以合法的每个环大小相同

变为求((a)*(b)*...*(f))^m,先算出来后短多项式求幂(\(g(x)=f^a(x),f(x)g'(x)=af'(x)f^a(x)=af'(x)g(x)\)

agc031F - Walk on Graph

神仙题

由于图连通,所以可以(u,x)->(v,2x+c)->(u,4x+3c),因为mod为奇所以4有逆元,最后能走回(u,x)所以连双向边,如果(S,0)和(T,r)连通就yes

对于两条边ab,可以走到(u,4x+3a)和(u,4x+3b),即(u,4x+3a)-(u,x)-(u,4x+3b),因为4x+3a能表示任何数所以换元为新的x,变成(u,x)-(u,x+3(a-b))

接着把结论扩展,如果v有两条边ab,可以从u走到v,然后把系数调为3*2^k*(a-b),然后退回u得到(u,x+3(a-b)),同理扩展与v相邻的可以得到任意两条边的差

设g=gcd(a-b,b-a)(%mod),则(u,x)-(u,x+3g),可以把mod->gcd(mod,3g)

注意此时满足g|mod|3g,因为g|(a-b)且g|(b-a),得到g|0(%mod),即g|mod

此时所有边权模g相同,设为z,考虑转化把z去掉:把状态第二维+z边权-z,有(u,x)-(u,x+z)'-(v,2x+2z+c-z)'-(v,2x+c+z)'-(v,2x+c),和原问题等价

现在所有边都是g的倍数,因为mod=g/3g,所以边权为(0/1/2)g,那么第二维可以写成\(2^pz+qg\)的形式,由于(u,x)->(u,4x+3c),c为g倍数所以模mod为(u,4x),即可以把p按奇偶分类

(因为\(a^{\varphi(mod)}\equiv 1\),而mod为奇数所以phi为偶数,奇偶不会相连)

并查集连完后枚举q和p的奇偶,预处理所有(2^p-1)z直接判断(T,z)和(S,z+r)相连

CF1473G. Tiles

每次操作先调成前后不变,然后只要能走到右边路径都合法,直接ntt,要预处理卡常

CF1473F. Strange Set

把i连aj|ai的最后一个j,最大权闭合子图

CF1386B. Mixture

首先把三元组变为(1,a,b),如果第一维为0就找一维不为0的,然后对于两个(1,a1,b1)和(1,a2,b2),能取到的显然是两点连线,多个就是凸包内部的所有点,对于(0,a,b)的可以把第一维当成lim->0

维护夹角,如果恰好和询问点重合为1,两点连线过询问点为2,所有两点之间夹角<180°为3否则为0

具体实现可以维护分数,或者用实数然后大力调参+面向数据

6962. 【2020.01.24冬令营模拟】展览会

Boruvka算法,每次扫描线+线段树找扩展边

boruvka:维护当前的块,每个块拉一条连向块外的最小边,对这一层合并后继续,每次块/2

loj#2511. 「BJOI2018」双人猜数游戏

如果模拟AB剩余可能的数对,这样感觉不能搞,因为一个人不知道另一个人的数对

考虑直接dp,设f[i,j,k]表示经过i轮(j,k)是否能被当前的人判断,先考虑另一个人未判断出的情况

有f[i-2,j,k]->f[i,j,k],然后如果对于所有可能的数对(u,v)((u,v)!=(j,k)),如果f[i-1,u,v]均合法则f[i,j,k]合法,因为可以排除判断

最后要满足f[t,m,n]=1,f[t-1,m,n]=0,同时下一个人要能判断则f[t,u,v]均不合法,这样可以唯一确定mn

如果A知道了而B下一轮不知道,则因为A无法给更多信息所以B永远不知道,所以AB一定是先后在两轮以内知道

6960. 【2020.01.23冬令营模拟】简单序列问题

一种推法是把ai和an-i+2做差为b,变成b1<=b2<=...<=bm+1,设bm+1=n-a1,贡献是Π(bi-bi-1),同时有Σbi(i<=m)<a1

发现把bm+1一起加进去就变为Σbi<n,接着把b差分后和题解类似

题解做法:先把a差分然后写出约束,类似\(b_1>=\sum_{i=2}^{m}{(i-2)b_i}+\sum_{i=m+1}^{n}(n-i+1)b_i\)(b0=1,所以加上等号),先b2~bn填完后用b1使其合法,所以是b1方案*b2~bn方案

同时有\(\sum_{i}b_i<=n-1\)\(b_1<=n-1-\sum_{i>1}b_i\),设上面的系数为ci,设S=Σ(ci+1)bi,T=Σbi(i>1),则有0<=S-T<=b1<=n-1-T<=n,所以只用考虑最近的限制,即b1有n-S种取值,最后答案为Σ(n-S)f[S]

写成多项式就是分母为\(\prod_{i<=m}(1-x^i)\),变成无限项后上面是平方,由于2m>n所以%x^n=0,只有最多一项乘上去,下面是划分数的平方,用五边形数+求逆做到O(n√n)

loj#2513. 「BJOI2018」治疗之雨

设f[i]表示还剩i的期望,维护f[j]=aj*f[i]+bj(j<i),求出f[i]与f[i+1]后更新ab,时间O(n^2)

CF1284G. Seollal

先假设边全存在接着把一些边断掉,在四个点中间的方格放一个点连边表示断掉原边,发现求这个的一棵生成树等价于原问题(有环即把若干格子分割开),这样求了反图后约束等于一些点周围的四条边选最多2条,即图拟阵交均匀拟阵并

(似乎并不是简单的拟阵并,但应该是拟阵

6954. 【2020.01.19冬令营模拟】遗忘的记忆

图拟阵交若干均匀拟阵的并

6957. 【2020.01.19冬令营模拟】板凳

预处理出n+1段产生的区间,排序+二分or离线找到询问所在初始段,然后线段树二分往下找,要算往某个子树走的个数,直接算是log^2,预处理+递推可以一个log

CF1386A. Colors

67%:把[1,n]分成[1,n/2],[n/2+1,n],在两边各维护一个位置然后同时二分,最后剩一点时暴力处理,这样一边是log总次数为2log

100%:上面的每两次中只有一次有效,考虑直接二分答案,维护位置x每次左右跳,发现初始在大约1/3n的位置可以满足左右不会跳出去(先往右跳1/2n简单算可得,往内跳不会出锅),但实际上会所以出锅了就暴力找未找过的位置对(i,i+mid)然后用2询问每次来缩,卡不掉

6952. 【2020.01.16冬令营模拟】吞天得手

类似agc的某题,维护相同序列的结束位置集合以及出现次数,用线段树二分+set依次找集合第一个元素后的值,然后每个值扫一遍累加当前次数得到新的次数,递归往下做

这样显然按照字典序遍历

keyence2021D

考虑答案下界,设N=2^(n-1),则N(2N-1)|N(N-1)*k,k的最小值为2N-1,即2^n-1

构造答案:对于i=1~2^n-1,当popcount(j&i)为奇数时分到A,否则分到B

证明:只用考虑两个人xy分到同一组的次数为2^(n-1),对于i的某一位如果为0不会改变结果,为1且xy在该位上不同时会改变,则计算次数等于二项式展开后奇数项,即2^(n-1)

6950. 【2020.01.16冬令营模拟】枇杷树

直接暴力记忆化,求一个点到树内点距离和以及两点之间距离,前者状态m^2后者m^3(树以及两个顶点,顶点只可能是2m中的),map随便过

CF1386C. Joker

显然等于判断[1,L-1]∪[R+1,m]是否为二分图,枚举L求出每个L对应的最小R

发现贪心不行,所以直接模拟维护从后往前加的lct,每次把环中最小的R删掉,如果是奇环就更新ans

注意在加的过程中可能有未加但合法的边,左边不用管右边也不用管,因为删掉一条边后有关的只有连接两个连通块(两块的颜色可能反转)的,即跨过删掉边的,而这些边显然在删掉边之后加入,所以会一同删掉,同理不用再连锁删无用的树边

loj2493. 「BJOI2018」染色

首先二分图显然全部{0,1}卡掉,然后发现K3,3和K2,4也可以,于是大胆把>=3条非树边的判掉然后就过了

如果存在两个不相交的环,则可以各选一条边然后根据起点选0/1用这条边卡(一边{0,2}一边{1,2}),一般情况就是找两条边使得四个端点都能通过非这四个点连通,这样可以卡

先只考虑相交的情况,当>=3条非树边时图类似K2,4,若两个点都是4度则用四种颜色卡,否则在某个4点上拉一个环,环上选一条环外选一条即可卡掉

所以判掉了>=3的,当<=2时直接找出两个环以及相交部分判

agc050F - NAND Tree

偶数先枚举第一次操作的边

① 把边分组,显然组内的操作如果不操作同一个点,则可以交换抵消掉后面的,于是可以把两次操作合成一次

(如果不分组会假,后面的操作一次操作一个组所以不用考虑组之间的关系)

② 在①的基础上魔改转化题意:每次选择一个三个依次相连的点x-y-z,用x吃掉y和z,问题在于当x=z时操作后不为x,但这样x->y->z和z->y->x抵消了所以没事,当x≠z时讨论得证

③ 在②的基础上枚举最后剩哪个点,发现如果一次操作与根无关则两种方向抵消,因此每次只能选根往下吃

然后随便写个dp把树划分成若干长2的链,时间O(n^3)

(划分是唯一的,可以组合数O(n^2)

UPD:偶数的话其实第一次的边和根可以不同,但根据597第一定理确定了根之后剩下的为偶数(双射?),所以可以硬点相同

6935. 【2020.01.01冬令营模拟】祭(口胡)

5k1分阴间做法:分治,考虑跨过分治中心的矩形,左边变成求区间内子区间min和,右边离线每加一次多两个询问区间,区间min和用单调栈+区间历史和维护

正常log^2做法:扫描线+线段树+单调栈+树状数组,每次单调栈弹掉的乘上右面投影过去的面积(就是Σminl*minr)

还可以一个log用吉司机树做

CF1470E. Strange Permutation

显然可以把(i,j)连向(i+1+k,j-k),然后就是求字典序第j小的第i位

对(i,j)->(i+1,j)维护重链,走重链直接二分到下一个不走的位置(到一个点的限制是[先前的,先前的+当前的],是一个单调内缩的区间),只会走c条轻边

CF1466H. Finding satisfactory solutions

发现限制就是把最终边以及之前的边加进去后,除了完全由最优边组成的环以外没有新的环

dag计数,每次加上若干度数为0的点,容斥系数为(-1)^(|S|+1),则显然可以发现会算恰好一次

把相同大小的环缩起来(1440)每次加若干相同的环,O(1440*n^3)dp即可

CF1466I. The Riddle of the Sphinx

单独一次操作很无力,但将两次操作组合即可做到询问一段前缀与给出等长串的大小关系(前面相同后面全1)

先考虑一个5(n+b)的做法:

维护一个栈,从低到高位数递增,第i位恰好匹配潜在max的前i位,考虑新加的串和栈顶的大小关系以及需要的操作次数

①小于:不加,2次(询问先大于后小于)

②等于:加同时找下一位,3次+1栈

③大于:弹栈顶,1次-1栈+①/②/③

最后会剩下一些,接着从后往前用最长的比较现在的(2次),如果现在大就删后面,小就不加,最后剩下k个有长度为k的相同前缀,递归求解

一个栈的势能是2,所以全②下非递归为5n,递归一次是(n,b)->(k,b-k)=>5k,势能总数为b,所以是5(n+b)

优化:先把最后比较的那部分变成只比较大于,则最后剩下的是小于等于末串,在下一轮里会被恰好等于的干掉,这样是4(n+b)

然后把前面的比较小于也去掉,原理同上就是递归进去的串里的前缀小于等于给出的,同时有至少一个等于,而且如果当前串小于给出的那么往后加的全是0,不会产生新的max,这样就3(n+b)了

6944. 【2020.01.07冬令营模拟】球

直接容斥后求算,最高只有三次和,写插值会被卡常

6945. 【2020.01.07冬令营模拟】星空

考虑暴力,费用流连S->i,i->i+1,i->T连边,发现每次增广等于加上一对点,满足加上后的括号序合法

左括号在左好做,左括号在右需要保证中间非0,线段树维护区间内点对中间次数的min最小b和非最小b,再维护前后缀到最小值为止的minb

6943. 【2020.01.05冬令营模拟】社会实践

先构造一种方法:从后往前维护一个位置x,表示把前面[1,i]移到x,若当前和x相同就不动,否则把前面的移到第三根上,然后移i,最后用2^(i-1)-1移到x,总共要2^(i-1),求和得到上界为2^n-1

现证明其最优,若当前相同仍移动则花费2^(i-1),大于前面的上界2^(i-1)-1,所以能不动就不动

线段树维护经过后的位置变化以及答案

CF1264E. Beautiful League

先用总数-不合法数,不合法数=Σ(出度-1)*出度/2

对于原图的边(u,v)新建一个点x,连st->x,x->u,x->v来表示哪个点被分配了1出度,对于每个i连n条流量为1费用依次递增的i->ed边,表示出度每+1的代价

跑最小费用最大流,时间O(n^4log)能过,题解似乎直接模拟做到O(n^4)

CF1470C. Strange Shuffle

打表发现p一直是k,p前面的一段小于k后面一段大于k

证明归纳,满足以p为中心往两边的两个数之和为2k,无论奇偶往外都是各k的贡献,p每次也把k贡献出去,最后剩下的一个/两个也一样

所以随机出一个然后往前/后找k即可

CF1470D. Strange Housing

贪心往外扩,选了x后考虑与把x相连的 相连的加进去,显然有解

loj#3347. 「APIO2020」有趣的旅途

首先以0为根求子树大小即可O(n)找到重心,然后O(3n)找到相连的三个子树的深度集合,把集合从大到小排序

如果只有两个子树,n为奇显然是(n-1)/2,n为偶就是两个n/2,所以直接跳

如果有三个子树,则每次找当前最大的不在同一个子树内的跳,跳到存在某两个子树的和与另一个的差绝对值<=1且下一个要跳的是最大的就变成上面两个子树的情况,最后把根丢到较小的那边里

因为每次选最大的可以通过归纳得到剩下两个中只有最多一个大于它,并且若当前不是最大的则下一个一定是最大的

这样的话一开始轮流选最大的一定合法,因为若按顺序选abc不合法则a+b<b+c,即a<c,所以c和a显然不在同一个子树内,可以得到abc分别在三个子树内,即选a时bc都可选,那么若a<c则一定有a>=b,那会先选c而不是选b

要保证是最大的才能转化,因为这样下一步选另两个子树都合法,同时保证从下下步开始可以交替选

关于第一部分的3n爆标做法:

做法一(from dyp):先询问1到每个点的距离d,然后儿子在d=2的中,询问距离找到儿子,然后询问儿子size找到重心,其他的点的距离当重心每往下走一步时+1,找到重心及三个相邻点,询问剩余点到相邻点的距离,分类讨论即可确定在哪棵子树以及到重心的距离

两部分的点集无交,同时每部分每个点最多2次,加上初始的共3n

做法二:初始的4n做法把找重心到每个点的距离去掉,问题是怎么找两个儿子,发现size大于其的第一个一定是父亲,询问这个点到其余点的距离,距离为2的点最多6个,把这6个点判一下即可,次数3n+6

6936. 【2020.01.01冬令营模拟】瞬

直接连通性dp会挂,因为对于子树t来说可以先放t后走一些子树,然后撤掉t后再往下走

设f[i,j,k]表示走完子树i上一个选j还能放k个的答案,转移对于每棵子树考虑t放不放,不放就从j走下来

因为树剖后只用log个就可以不用额外代价,所以k是log级别的,时间O(n^2logn)

uoj#575. 【ULR #1】光伏元件

如果没有k的限制那就直接拆行列连边,假设有限制[L,R,K],则连S->i1[L,L+K],i2->i1[0,R-L-K],i2->T[L,L+K],由于流量平衡所以i1和i2的流量限制在[L,R],并且二者的差在K以内,因为走i2->i1的话差不变

跑dij费用流O(n^4),具体就是维护数组h,h初始为dis,然后边w'(u,v)=w(u,v)+hu-hv,因为是最短路所以非0

然后找到一个流后把所有的hi加上当前的disi,这样仍满足条件

证明的话有disu+w'(u,v)>=disv,所以如果u->v不流的话加上也满足

否则有du+w'(u,v)=dv,du-dv+w(u,v)+hu-hv=0,(dv+hv)-(du+hu)+w(v,u)=0,有h'v-h'u+w(v,u)=0,即w''(v,u)>=0

posted @ 2021-01-02 22:03  gmh77  阅读(551)  评论(0编辑  收藏  举报