2025.2.24 test

这把还可以。首先是觉得 C 很像以前学的那种列竖式的做法,然后狂想这个题,大概到 1:30 的时候写了个 40pts。然后回去看 A 就秒了。最后 B 即使想到调整的关键性质,但是考虑最优化 x+y 的时候忘记二分了。然后 C 题的问题就是思路不够宽广,打表找规律没怎么打,然后一个背包的思路死磕了,其实背包是 NP-Hard 这个很难优化的。

A

n 个人 (ai,bi),你要选 k 个人使得 ai 互不相同且最大化 minij|bibj|n104,k5

非常典的一个题,给每个人随机赋一个 1k 的颜色。随到的概率是 k!kk
然后二分+枚举所有 1k 的排列然后从 b 从小到大贪心选。然后做完了。

B

有一个序列 a,你每次可以选一个位置 p,并令 aiai|ip|。最优化操作次数使得 a 全部 0
n105,ai1018

最优化问题考虑调整。发现如果有两个不在首位或者末尾的操作,将他们一个移到首位一个移到末尾更优。
那么,不在首位或者末尾的操作次数最多为 1 次。考虑枚举是哪位操作,也许用 ds 维护,这是大致框架。
考虑表示限制,设首位用了 x 次,末尾用了 y 次,那么限制就是 (i1)x+(ni)yai。最小化 x+y
这个可以在平面上用半平面交表示,然而不会。不妨二分答案,将二维降至一维。设 x+y=k
现在不等式的变量只有一个了可以直接解出来。然后只需要判断不等式是否有解就行了。
现在是 O(n2logn)。考虑第一个枚举怎么优化。我们把枚举放在二分里面。
因为不等式化简后是 xai|pi|(ni)k2in1,而 x 是整数,随着 p 的移动 x 的移动是调和级数级别的。
三只 log。考虑 ds 维护 p,考虑枚举上面不等式的各种取值,然后相当于区间 chkmin 完后,单点查询。
你考虑 ST 表反过来即可。就是修改相当于只改两个 fi,j,然后最后询问再从上往下放下去即可。
log,发现常数大的跟史一样。
不如先算不用 p 的答案,显然最后的答案至多比这个答案少 1。最后再检验一下即可。复杂度单 log

C

求所有长度为 n 的序列中满足和为 x,或起来为 y 所有序列所有元素的异或和。n240,x260,y220

首先划分等价类然后研究方案。我们考虑拆位然后一个方案就是第 i 位中 1 的个数,设为 {ci}
考虑一个方案如何有贡献。首先符合 y 的限制,要么有 1 要么无 1 的区别,这个很简单处理。
一个等价类的方案数是 Cnci,而因为是异或所以我们要 mod2,根据 Lucas 定理就是 cin 的子集。
那么考虑从低位往高位填,状态是当前进位数,转移枚举 ci,维护当前异或和,以及方案数 mod2 的值。
可以通过比较小的数据。复杂度大抵是 O(nxlogx)
考虑打表找规律,发现若 n 为偶数那么答案为 0,这是因为拆贡献每个 ai=v 的方案数都相同可以抵消。
考虑 n 为奇数,那么相当于只用考虑 a1 的贡献。不妨拆位,算剩下数满足条件方案的异或和。
我们上面说了背包是 NP-Hard 所以难以优化,这时候可以想到组合数工具。比如算 ai=x 的方案数。
也就是说现在从 x 的限制入手,y 的限制可以考虑容斥。设 f(y) 表示只有 y 子集的位可以填 1 的方案数。
那么 f(y)=y(1)|y||y|f(y),换成异或就是 f(y)=yyf(y)
那么相当于求 ai=x[a1(y2i)]×[a2y]××[any]
考虑逆用 Lucas 定理,也就是 ai=x2iCy2ia1×Cya2××Cyan(mod2)
这个是范德蒙德卷积,也就是 Cyn2ix2imod2。套 Lucas 回去即可。枚举 y,i,复杂度 O(ylogy)

posted @   s1monG  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示