AT

[ARC144D] AND OR Equation

考虑这个 a 的关系式可以看成两个集合的合并 aS+aT=aSTaST,可以把 aS 表示为 iSpi。还可以同时加一个常数 caS=c+iSpi

于是转为对合法的 cp 的计数。

考虑 p 确定时,c[minaS,kmaxaS],即 kpi>0pi+pi<0pi+1=k|pi|+1 种选择。

于是只需确定 |pi| 后乘上 2[pi0] 确定非 0 数的符号即可。

答案为

ans=i=0n2i(ni)j=ik(kj+1)(j1i1)=i=0n2i(ni)[(k+1)j=ik(j1i1)j=ikj(j1i1)]=i=0n2i(ni)[(k+1)(ki)j=ikj(j1i1)]=i=0n2i(ni)[(k+1)(ki)ij=ik(ji)]=i=0n2i(ni)[(k+1)(ki)i(k+1i+1)]=i=0n2i(ni)[(i+1)(k+1i+1)i(k+1i+1)]=i=0n2i(ni)(k+1i+1)

可以 O(n) 递推。

[ARC100F] Colorful Sequences

对包含一个排列的序列考虑很难做,容斥为所有序列包含 A 的个数减去不合法序列包含 A 的个数。

前者为 (nm+1)knm,现在只需要解决后者。

  • A 中包含一个长度为 k 的排列时,显然答案为 0

  • A 中没有重复元素时,有 k<m。这里有个巧妙的转化,可以去统计所有不合法序列中包含长度为 m 且这 m 个元素互异的区间个数,因为对于所有 km 种长度为 m 的序列,仅有一种是 A,于是答案为区间个数乘上 1km

    先考虑对所有不合法序列计数,用 fi,j 表示考虑了前 i 个元素,从后往前最多 j 个元素互不相同的不合法序列个数,转移为 fi,j=(kj+1)fi1,j1+jp<kfi1,p,后缀和优化即可 O(nk)

    gi,jfi,j 相同定义下,长度为 m 且这 m 个元素互异的区间个数,转移为 gi,j=(kj+1)gi1,j1+jp<kgi1,p+[jm]fi,j

    初始 f0,0=1,答案即 i=1k1gn,ikm

  • A 中有重复元素时,说明不会有长度为 k 的排列包含序列 A,于是枚举 A 在序列中起始位置,只需保证左边和右边都没有长度为 k 的排列。

    l,r 为序列 A 中极长的元素互异的前后缀长度,于是可以像上面那样 DP 计数,区别是 f0,l=1,f0,r=1,这样便计算了 A 对左右两边的贡献,答案为 i=1n(0p<kfi1,p)(0p<kfnim+1,p)

[ARC101E] Ribbons on Tree

考虑不合法的情况,那条未被覆盖的边可以把整棵树分成两个连通块。记 g(n)n 个点无限制两两匹配的方案数,g(n)=(n1)×(n3)××1。容易想到容斥,钦定某些边未被选,答案为 (1)|S|f(S)f(S) 表示断掉 S 这些边后形成的连通块的答案,也就是每个联通块的 g(siz) 之积。

然后令 hi,j 表示 i 所在联通快还有 j 个点未匹配的答案,可以简单转移。

[ARC101F] Robots and Exits

把最左边的洞左边的人和最右边的洞最右边的人去掉,可以用二元组 (l,r) 描述每个人,表示它左边的洞和右边的洞距离分别为 l,r,那么 (l,r) 相同的两人显然是等价的。

我们用 1 表示进了右边的洞,0 表示进了左边的洞。对于 (l1,r1),(l2,r2) 满足 l1l2,r1r2,若 (l1,r1)1(l2,r2) 必为 10 的情况同理。

(l,r) 在平面上表示出来,那么 (l,r)1 即一个 xl,yr 的矩形内全部是 1,选 0 即一个 xl,yr 的矩形内全部是 0

考虑把选 1 的矩形全部拿出来,会构成一个阶梯状物,阶梯对应的折线,折线上的折点满足 r 严格单调递增。而这条折线唯一对应一个阶梯,也即一个合法的 01 序列。

于是我们只需统计将二元组序列按 l 排序后,有多少个单调递增子序列即可。

[ARC102D] All Your Paths are Different Lengths

你为了让路径数指数增长,自然想构造一条链,链上每条边都有一条重边,这样路径数就是 2n1 的。

n=log2n+1。对 i[1,n1],连一条 (i,i+1,0) 和一条 (i,i+1,2ni1) 的边,这样就能构造出 2n1 条路径,覆盖了 [0,2n1) 的路径长度。

剩下部分也很简单,对于 i[0,n2],若 L 的第 i 位为 1 就连一条 (1,ni,lst) 的边,并让 lstlst+2i,初始 lst=2n1。注意到边数最多为 3n,可以通过。

[ARC102E] Stop. Otherwise...

为啥可以爆标题解区没人说?

你考虑怎么对单个 x 求答案,求出满足 i+j=x,i<j(i,j) 数量 m=x2max(1,xk)

考虑容斥,ansm=i=0m(1)i(mi)(n+k12ik1)。表示钦定选了 i 对和为 x 后的方案数,剩下的可自由分配的骰子个数即 n2i,直接插板法求得。x 的答案即为 ansm,至此可以 O(nk) 解决该问题。

fi=1,gi=(1)i(n+k12ik1)ans 的 EGF 即为 f 的 EGF 卷上 g 的 EGF。多项式乘法可做到 O(klogk)。所以此题完全可以出到 k106

[ARC102F] Revenge of BBuBBBlesort!

我贺了题解一个 nb 结论。

考虑奇数位上都是奇数,偶数位上都是偶数,否则不合法。接下来我们把序列分为奇数位和偶数位两组。

然后考虑每次交换会让奇数位或偶数位上的逆序对 1,总逆序对 3

S 为序列的总逆序对,T 为只考虑奇数位和只考虑偶数位的逆序对之和,合法的必要条件是 T=13S

我们声称对奇数位和偶数位分别进行冒泡排序,每次交换都是合法的。因为一次合法的交换会使总逆序对个数 3,否则 1。首先这样一共交换 T 次,每次交换最多减少 3 个序列逆序对,而总逆序对是 3T 的。若有一次交换不合法,则最终序列总逆序对必定无法减到 0,矛盾。

[ARC103D] Robot Arms

合法的充要条件是所有 x+y 奇偶性相同。考虑倍增构造,每次往距离 (X,Y) 最近的方向走 2i 步,可归纳证明有解。

[ARC103F] Distance Sums

感觉有点意思的!

我们可以推得 Dfai=Di+sizin+sizi。注意到最大的 Du 一定是个叶子,此时 sizu=1,于是我们可以推出 u 的父亲的 D 值,又 D 互异,于是可以确定 u 的父亲。

然后我们继续找次大的 Du,此时它的 sizu 也是确定的。这样就可以推得整棵树了,无解当且仅当推出的父亲 D 值找不到了。

注意这只保证了所有 DfaiDi 符合条件,不能说明 Di 就是所有点到 i 的距离和,所以最后要 check 下 Drt 是否等于 irtsizi

[ARC104F] Visibility Sequence

DP 真的会不了一点。

考虑怎样的 p 会合法。对每个 i 连一条 (i,pi) 的边,构成一棵树。树上每个点满足其 hi<hfai,且每个点的 hi 大于等于它左边的兄弟节点的 h 值。

aii 左边的兄弟,bii 最右边的儿子。令 ci=max(cai,cbi+1) 这样便构造出了 p 排列的一组最小的可能 h,合法当且仅当 i,xici

于是设计状态 fl,r,k 表示 [l1,r] 构成一棵根为 l1 的树且 cbl1k 的方案数,转移考虑枚举 l1 最右边的儿子即可。

[ARC105E] Keep Graph Disconnected

这个题独立思考出来了,感觉有一些的意思!

注意到最后的图形如两个完全图,一边是 1,一边是 n,记 sizii 所在连通块大小,先手获胜当且仅当 n(n1)2msiz1×sizn 为奇数。

然后发现 n 为奇数时这个东西和 siz 没关系,考虑 n 为偶数。

1,n 所在连通块的奇偶性来讨论:

  • 1,n 所在连通块奇偶性相同,我们声称无法改变 siz1×sizn 的奇偶性。

  • 1,n 所在连通块奇偶性不同,除了 1,n 连通块,剩下的奇连通块个数为奇数,先手可以决定将一个奇连通块与 1,n 中的一个合并,一定可以任意调整到 siz1×sizn 奇偶性,随后和第一类情况相同。于是先手必胜。

至于为什么无法改变 siz1×sizn 奇偶性,称后手为不想改变那方,先手为想改变那方,发现后手总是可以模仿先手操作来保证奇偶性不变。然后简单分析一下也知道后手不会有被逼主动去操作奇连通块的情况。

[ARC105F] Lights Out on Connected Graph

这个题居然没会,感觉自己有点唐。

先求出不保证点集 S 联通的二分图个数 fS,这个就是 TS2cntScntTcntSTcntS 表示 S 内部的边。

然后你考虑容斥算,gS 表示点集 S 联通的二分图个数,gS=fSTS,min(S)TgTfST,表示枚举最小那个点在哪个连通块,O(3n)

[ARC106E] Medals

这个题以前做过,然后忘了。。。

a 从大到小排序然后依次满足,显然答案 2nk,理由是考虑前 2nk 天每个人至少出现 nk 天,其中最多 (n1)k 天被占用,所以 2nk 是答案上界。

考虑一个建图,把每个人拆成 k 个点,出现就往那天连边。即求有无完美匹配。

二分后转化为前 m 天是否可行,处理出每一天对应的人的集合,然后考虑 hall 定理,右部点的个数是一个简单的子集和问题,复杂度 O(2nnlogk+n2k)

[ARC106F] Figures

考虑对 Prufer 序列计数,答案为 di=2n2(n2d11,d21,,dn1)aidi

简单推一下:

ans=di=2n2(n2d11,d21,,dn1)aidi=di=n2(n2d1,d2,,dn)aidi+1=(n2)!di=n2ai!di!(aidi1)!=(n2)!(ai)di=n2(ai1)!di!(aidi1)!=(n2)!(ai)di=n2(ai1di)=(n2)!(ai)(ainn2)

可以 O(n) 计算。

[ARC107D] Number of Multisets

不太好对有理数设计的 DP 状态,所以可以看成每次往序列末尾加个 1,或者序列整体除以 2,这样就可以用 fn,k 表示 n 个数和为 k 的答案了,因为 k 一定为整数。

[ARC107F] Sum of Abs

比较棘手的是这个绝对值怎么处理,很容易往流去想。

注意到同一个连通块要么同时取正,要么同时取负。

可以考虑那个 最大权闭合子图 的套路,把与 S 相连的点划分到取正的连通块,与 T 相连的点划分到取负的连通块,用最小割去刻画这个划分的过程即可。

可以通过拆入度点出度点转化成有向图,且很好的解决了这个删点的代价。

具体地,如下连边:

  1. i[1,n],连 (ini,outi,ai) 的边。

  2. i,bi0,连 (S,ini,2bi) 的边。

  3. i,bi<0,连 (outi,T,2bi) 的边。

  4. (u,v)E,连 (outu,inv,+)(outv,inu,+) 的边。

答案即为 |bi| 减去最小割。如果你理解了最大权闭合子图怎么做,那如何连边是显然的,关键是能否看出可以划分正负连通块这步。

[ARC108F] Paint Tree

考虑直径,若直径两端点同色,则答案为直径。

否则记两端点为 (rt1,rt2),因为每个点距离最远的点必定是直径端点,可以按这个最远距离 mdis 从大到小排序,依次考虑。如果和对应的直径端点同色,那么剩下的点随便选,计算贡献。否则和对应端点异色,继续考虑下一个点,直到当前考虑的点的 mdis 还不如前面异色点到另一个端点选的距离大。容易发现这样不会有不优的情况。

[ARC148E] ≥ K

ai=2aiK,转化为相邻两数之和 0

于是相邻两数不能均为负,且负数的绝对值 正数的绝对值。

考虑插入序列的考虑这个过程,按绝对值从大到小排序,相同则正数先放,这样就解决了绝对值的限制的问题。然后维护一下可以放的位置个数,对应乘一下方案数,还是比较好算的。

[ARC110F] Esoswap

先考虑 n1,因为显然不会有循环,可以一直交换直到换到 0,这样可以让 pn1=0

再考虑 n2,一直交换直到换到 1,这样再换一下就可以将 pn2=0,pn1=1

所以从后往前考虑,每个都换到 0 前一直换即可。

[ARC110E] Shorten ABC

有点太超前了,一知半解。

可以把 ABC 看成 123 这样就是对不同的数执行异或操作。同时两个相同字母也可以通过旁边的不同字母消掉。

于是一段字符串可以合并为一个字母,前提是该字符串不只由一种字母构成。

声称 T 能被 S 得到,当且仅当 S 不仅由一种字母构成,且 T 能被 S 贪心匹配给划分。

定义 T 的贪心匹配为,S 从头开始,找到最小的 i 使 s1s2si 异或和为 t1,然后从 i+1 开始继续匹配 t2,以此类推,最后会剩下一个异或和为 0 的后缀,可以为空串。

这个结论的证明不难,调整法即可(不会证就直说)。于是每个这样的贪心匹配唯一对应一种 T。进行一个 dp,从后往前,fi 表示后缀 i 的答案,有 fi=fnxt1+fnxt2+fnxt3+[sum(i,n)=0]sum 为异或和,其中 nxtj 表示最小的 x 使 sum(i,x1)=j

最后注意判一下整个串被划分为空串的情况。

[ARC111E] Simple Math 3

是个类欧板子,顺便学了一下类欧。

(CB)iD1 就寄了,所以 iD1CB

然后每个区间最多一个 D 倍数,答案就是区间个数减去所有区间 D 倍数的个数和。

然后差分一下,答案为 i=1mA+CiDA+Bi1D,其中 m=D1CB

[ARC111F] Do you like query problems?

完全不会啊!当个皇家翻译官。

把问题转化为答案的期望值。

E(t,i)ait 次操作后的期望值,P(t,i,v)ait 此操作后 aiv 的概率,有 E(t,i)=v=1m1P(t,i,v)

称一次操作是关键的当且仅当 lkirkvkv 时是 maxvk<v 时是 min

若没有关键操作,P(t,i,v)=0,否则 P(t,i,v)=mvm。记 pi 为一次操作将 ai 变为 w 的概率。因为无论之前 ai 是何值,我可以根据 aiw 的大小关系灵活决定我是取 max 还是 min,故 pi=i(ni+1)n(n+1)2m2m+1

于是 P(t,i,v)=[1(1pi)t]mvm,于是 E(t,i)=[1(1pi)t]m12

然后考虑询问的贡献,E(t,i) 对答案有贡献仅当 t+1 次操作是询问且区间包含 i,记概率为 qi=i(n+1i)n(n+1)212m+1

于是期望答案为

ans=t=0Q1i=1nE(t,i)qi=i=1nqim12t=0Q1[1(1pi)t]=i=1nqim12[Q(1pi)Q1pi]

[ARC112F] Die Siedler

直呼神题。贪心策略肯定是能换掉就换掉,然后这个换卡的操作可以认为是一个 2i 进制的进位,特别地,第 n 位进位到第 1 位。

然后你发现买卡这个操作就是进行加法,就先把初始状态 S 和每种卡包状态 ai 全部转为方便算的十进制。

设最终状态为 TT 若是可达的则 T=i=1naixi((2n)n!1)y,裴蜀定理得等价于 ST(modgcd(a1,a2,,an,2nn!1))

gcd 根号分治,大于根号直接暴力,小于根号同余最短路。具体地 i(i+2ii!) 连边权为 1 的边,表示选了一个卡,0Smodgcd 的最短路即为答案,注意 Smodgcd=0 时要钦定走过非零条边。

[ARC114D] Moving Pieces on Line

首先这个每个棋子肯定不走回头路,然后差分一下这个序列,就是表示为与前一条边是否不同。然后每个棋子相当于选自己和别的一个位置异或 1,现在就是要求某些位置必须为 1

然后就变成有 n 个红点 am 个蓝点 b,可以用 ai 匹配 bj,代价是 |bjai|,也可以 aiaj 匹配,代价是 |aiaj|,最后要求所有蓝点和红点都必须被匹配完。

n<m 显然无解,n=m 就是排序后小的和小的,大的跟大的匹配,n>m 就是有些红点要内部解决掉,观察到只有相邻的红点互相消掉才是优的,排序一下,fi,j 表示前 i 个红点和前 j 个蓝点匹配完的最小代价,dp 即可。

[ARC114E] Paper Cutting 2

有个比较牛的想法,不要考虑这个把一部分去掉的限制,一直在初始的网格里面选,选到了不在当前矩形内的就跳过,这样算出每条边在某一时刻被选中且还在矩形内的概率,把每条边的概率加起来再加上最后一刀即为答案。

s 为所有可选择的边,l 为左边可选的边,r,u,d 同理。比如说选左边第 i 个,答案为 j=0(r+u+d+i1s)j1s=1s(r+u+d+i1),其余类似。

[ARC117C] Tricolor Pyramid

我勒个构造题,注意到把 RBW 看成 012 后每次操作就是 2(x+y)mod3,然后就提 2 出来发现贡献是个组合数。

posted @   Terac  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示