NOIP 模拟赛:2024-10-15

T1:

每个连通块都删成树。

T2:

S(x)S(y)=S(lcm(x,y)),而 S(60) 里只会有 1 这个数,因为答案保证 1017

同时注意到若 ni|nj,那 nj 没必要存在。

直接搜索 + 容斥,如果当前 lcm60 就退出。

T3:

T4:

按位与:从高位到低位扫描,若当前位可以是 1,令当前位是 1,只保留当前位是 1 的数在数组里。

按位异或:01-Trie 经典例题。

按位或:同样是贪心。但是问题在于如果遇到 1 位无法减少可能性。

假设现在已经枚举了 ai,要求和 ai 按位或的最大值。设 ai0 的位的集合是 Zero

举一个例子:Zero={9,4,1}。那么我们先判断是否存在 {9}1 的数,比如存在;再判断是否存在 {9,4}1 的数,比如不存在;然后判断 {9,1} …… 如此判断下去。

我们自然想到要预处理出 f[S] 表示使得 S 中位为 1 (其他位随便)的数个数。如果成功求出,判断变成 O(1) 的,而且方案数也好求了。
但是如果直接求,是 O(n223) 的,不能接受。

ai1 位集合是 Aip[T] 表示 At=Tt 个数。那么 f[S]=STp[T],可以 SOSDP。

首先 p[T] 显然好求。设 g[i][S] 表示所有 30i 位都与 S 相同(i10 位随便),包含 S 的集合 Tp[T] 的和。

考虑转移,g[0][S]=p[S]。若 Si1 位是 1g[i][S]=g[i1][S],因为要使得 ST,又 Si1 位是 1,显然 T 的第 i1 位也应该是 1,也就是和 S 的第 i1 位相等了。
Si1 位是 0,此时 Ti1 位可以是 0/1。若是 0g[i][S]g[i1][S];若是 1g[i][S]g[i1][S+2i1]。因此可以 O(23223) 递推出 g[i][S]

f[S]=g[31][S]

posted @   FLY_lai  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示