【杂题乱写】2023-11 #2

ARC147C

Find the maximum L and the minimum R to be mL and mR respectively.

If mL<=mR holds, we can set every xi to be mL and the contribution will be 0.Otherwise we'd greedily set RargminR=mR and LargmaxL=mL. All the other xis would choose a position between [mR,mL] and there will be a contribution of (mLmR)×num where num represents the number of is who don't have a fixed position.

Sort the array L & the array R will help.

ARC157C

Square number equals to the ways of choosing two stuffs during the process.So calculate with DP: let fi,j,0/1/2,0/1 represents the number of ways which end at (i,j) with 0/1/2 YY(s) chosen and the latest character is Y or not.

Transitions are trivial.

ARC156B

其实你强制 mex 从小到大加入就行了是不是,这时候就变成了插板。如果有某个位置没数了,就先强制一个集合的 mex 是它再插板咯。

ARC157E

由于没有 YY 的出现,所以 Y 的出现位置本质上是一个独立集。

感觉这个 B 个 XY 的限制很奇怪,仔细一想就是在钦定 Y 的位置,至于根是不是 Y,这个明显是 corner case。这时候有一些初步的想法就是状态里面记录 Y 的数量和 Y 所有儿子的数量。

这样的话题目里 树形态的性质就没有用上,不过你发现如果非叶子的 Y 最多只能有 C2,或者说有几个叶子几个非叶子确实是确定好的。那么就想起来可以记录满足某个状态下另外一维的最值,独立集又满足从最值开始可以通过删点得到任何一个数。于是设 fx,i,0/1 表示 x 点子树里面选了 i 个叶子,再根据独立集的要求加一维 0/1

ARC165B

最不济,可以直接 sort 最后 K 个。不想让后 K 个变的元素多,所以往前挪挪 sort 的区间的左端点,怎么判断能不能挪到某个左端点呢?

首先不能破坏原来 [l,nK] 这部分的结构,于是这段里面要单调递增,且最大值比后面的最小值要小。

ARC165C

想了想一个环的情况,偶环肯定二分图染色,奇环就最大的边两端同色然后再染色。这个为什么不能拉到最小生成树上呢?于是建立最小生成树,每条非树边按照上面的方法去取 min 即可:如果两端点颜色不同可以忽略(因为两条树边加和比一树边一非树边肯定更短一些),否则 checkmin.

ARC165D

每个位置的字符看成点。对于每个限制,先强制 sAi<sCi。得到有向图可以有若干强连通分量,这里面的点对应位置的字符肯定想等,那么有些限制需要依赖 Ai+1,Ci+1

所以我们迭代缩点,每轮判断是不是某个限制不能满足在它当前 Ai,Ci 解决战斗,如果不能那么就连边。因为 n,m2000 这样的遍历不会有问题。

但是现在其实你会有疑问遍历的轮数是什么样的,其实你只要加边的时候只加那些 dag 链下游连向上游的边就行了,这样每次有加边就会合并至少两个点,就最多进行 Θ(n) 轮了

上下游就是拓扑序,拓扑序按照 2-sat 那套理论就通过 scc 编号判断很香。

ARC166C

真的这题确实是不会做。

注意到涂色是 LU/RD 那么我们可以按照对角线分割棋盘,比如每个小方格都从左下向右上连一条边。这样网格图变成了 2nm 个小三角形。把题意变成给小三角形涂色,画画图就能发现现在是一个三角形涂色之后与它直角边相连的两个三角形是不能涂色的。互相影响的三角形在类似矩形对角线上,对角线之间独立。

剩下的工作比较 trivial,就是一个前缀积的事。

ARC144D

超级喜欢这题的啦。

还是看成集合操作,如果你有 v,v{1}v{n} 的值整体就确定了。只不过需要保证这些都是属于 [0,k].

把上面的记号换成 v0vn 捏客官。这时 vS=xSvx(|S|1)v0v1vn 整体减去 v0 那么变成 vS=xSvx+v0。此时计算排列 v 的数量,限制就是 v0[vi<0vi,kvi>0vi] 那么对于任意一种 v1vn 都有 v0 的方案数是 ki=1n|vi|

所以我们果断枚举 i=1n|vi|。因为是绝对值的和,每个 vi 可以选择正负,所以还得枚举有多少个不是 0。至于 |vi| 总和知道了内部怎么分配,就是一个插板的事。进行组合恒等变换即可。

ARC162D

如果某个大小大于 K 的连通块在某个时刻出现了,那么就会造成 1 的贡献,于是统计概率。

如果想要某种特定形态的连通块出现,那么必须保证这个连通块里面的点不被删掉,且和它相连的点都被删光了,于是有一种方法就是 fi,j,k 表示“以 i 为根的子树里面有 j 个点和 i 联通,这些点的出边一共 k 条”的方案数。

考虑这个大小不小于 K 的连通块和他的 x 条出边相连时每个时刻大小都是不小于 K 的,那么每个点被点掉的概率时相等的,那么它存在的概率就是 K!x!(K+x)!

ARC157D

两维切割一个一个看。注意到要求每若干行上的 Y 的数量相等,这个数量是 Y 数总和(记为 S)的因数,所以枚举之。

枚举行之后分割列也是类似的原理。每种行总数对应的列的分割方案肯定是相等的(因为只有空列会影响选择)所以配合二位前缀和继续枚举之。

kenkoooo 评分高是因为大家都不打表吗?

ARC154E

听说这题很拽。

一开始想的时逐对 i,j 统计产生贡献的概率,但是不一会就发现这个式子可以拆开,变成对每个 i 统计 j=i+1n[pj<pi]j=1i1[pj>pi]

再看两眼发现如果一个是 <i 产生的逆序,一个是 >i 产生的逆序,我给他交换一下式子的值不变。那么我使大劲交换,最后剩下的是 f(p)=i=1ni(ipi)。那么要求所有情况下 i=1nipi 的和。

感觉分析每个位置最后谁跳过来了还是太抽象了,不如分析每个数跳到哪里了。然后我觉得这不能再是生成函数搞折线乘积了吧。然后我就不会做了。

std 大概就是也是看两眼这个折线,但是它比较牛逼,也就是说如果你 x 挪窝了,挪到 i 和挪到 ni+1 的概率是一样的,为什么我就没想到四项取 min 能把 y 换成 n-y+1 再往里带呢……所以只要挪了期望位置就是 n+12

所以分成这个 i 从未挪窝 和 曾经挪了 计算就行了。

ARC154D

想一想 pi+pj>pk 变成 pkpi<pj 那么对于 j[1,n] 全问一遍那么可以把所有数分成两拨,一拨比另一拨严格大。随机问的话复杂度看起来就是 Θ(nlogn),不过我没写就是了。

std 是注意到了 pi+pi>pjpi=1 只有一个 j 满足条件,那么搞一个摩尔投票类似物可以把 pi=1 搞出来,这样的话就用 pi+1>pj 比较 pi,pj 的大小,写一个归并排序就行了。

ARC166D

贪心让每个线段尽可能靠后结束。开始存 y1 个从负无穷延伸过来的区间往后走。对于某个 (xi,yi) 如果现在存的区间数量大于 yi 那么就选择开始点最小的一些结束。如果相等就继续,否则再存 yicur 个从 xi1+1 开始的区间(i>1)。

最后剩下的区间延申到正无穷,每个区间都是射线就没有最大值。

这怎么当成 ARC-D 的???

posted @   没学完四大礼包不改名  阅读(50)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示