CF 1257 题解

CF 1257 题解

A Two Rival Students

每次交换都可以让距离增加 1, 上界是 n1.

题目说至多而不是恰好交换 x 次, 于是不需要考虑边界.

B Magic Stick

一个重要的观察是: 如果能够得到 x, 那么就能得到任意小于等于 x 的数, 这是操作二保证的.

考虑操作 1 有什么用:

首先, 一个观察是, 如果我有 2k, 那么我就能得到 3k, 这个增量是不小的, 而我们还可以再把 3k 减掉一个数把它变成 2 的指数次幂, 再重复这个过程, 这个过程能否一飞冲天呢?

进行一些尝试:

考虑我现在想找到一个数 x, 它能够变成 109 以内的任何数.

如果它能够变成 319=1162261467, 那它一定合法;

因此如果它能变成 219=524288 就可以了;

这个数加上一个数约束严格更强, 把它变成 531441=312;

因此有 212=4096 就够了.

以此类推:

212=4096<6561=3828=256<729=3626=64<84=3424=16<27=3323=8<9=3222=4<9=3424

我们发现, 大于等于 4 的数能变成小于等于 109 的任意数, 那小于 4 的怎么办呢?

模拟一下就能发现, 3 能变成 1,2,3, 2 能变成 1,2,3, 1 能变成 1.

C Dominated Subarray

发现一个合法序列至少要有两个一样的元素, 找最近的两个相邻元素距离即可.

D Yet Another Monster Killing Problem

发现这个怪物需要顺序的打, 那只能 dp 了.

fi 表示打败前 i 个怪兽需要的最少天数.

lsti 表示第 i 天至多到第 lsti 可以一次杀完, 发现如果一个集合里的怪兽可以一次杀完, 那么它的子集都可以, 因此这个贪心是对的, 而且有可二分性.

考虑如何 check.

我们二分到一个 mid 作为 lsti, 那么需要:

\existk,stat.imidsk,maxj=mid+1iajpk.

抽象出来, 现在有 m 个点 (xi,yi), 每次询问给一个点 (x0,y0), 请你回答是否存在点 k 使得 xkx0,yky0.

维护一个横坐标递增, 纵坐标递减的链, 找到第一个横坐标能够包住 x0 的, 看看 yk 是否能包住 y0.

这个链用单调栈即可.

二分套二分, 复杂度 O(nlog2n).

E The Contest

发现操作数等于初始时不在指定位置的元素数量.

我们钦定结束时 A 掌管 [1,l) , B 掌管 [l,r), C 掌管 [r,n], 其中 [1lrn+1].

根据上面的理论, 则有:

ans=aA[al]+aB[a<l]+aB[ar]+aC[a<r]

这样, 答案就拆成了 ans=fl+gr 的形式, 可以拆开算了.

先用差分优化区间加来求出来 fg, 然后考虑, 我们枚举 l 的值, r 的唯一约束是 rl, 因此:

ans=minl=1n+1(fl+minr=ln+1gr)

g 用后缀和即可.

F Make Them Similar

发现前面一半和后面一半的二进制位是独立的, 可以前后分开搜两边.

设对于一个 x 来说, 前一半二进制位得到的 popcount 是 ai, 后一半是 bi, 那么有:

a1+b1=a2+b2=a3+b3k,a1ak=bkb1

这可以转化为一个字符串相等的问题. 用 hash 维护, 然后把两边搜出来的东西查看 hash 是否有一致的.

G Divisor Set

对于一个集合 A, 寻找它的一个最大子集族 F 使得其中任意两个集合互不包含, 那么 |F|=(|A||A|2).

首先, 容易构造这样一个方案, 充分性显然.

下证必要性:

F 中的每一个元素 S , 把 S 的全排列 和 A/S 的全排列做组合, 有 |S|!(|A||S|)! 种方案.

把所有的 S 得到的结果拼到一起, 得到一个排列, 由于 F 中的元素互不包含, 那么序列是不重的, 则有下面的式子:

i=1tsi!(nsi)!n!1i=1t1(nsi)i=1t1(nn2)=t(nn2)t(nn2)

这个结论对于数字一样成立, 证明特别复杂 不会

求方案数相当于你现在有 k 种物品, 每种物品有 si 个, 满足 i=1ksi=n, 请你选出 n2 个.

这个问题相当于一个背包, 而背包就等价于卷积. 我们设 Fi(x)=k=0sixk, 答案即为 [n2]i=1kFi(x), 现在的问题是怎么快速的求出来所有的多项式乘起来.

实际上是好做的, 每次考虑用前面一半的结果和后面一般的结果做 NTT 即可, 递归的去做, 每一层的复杂度单 log, 有 log 层, 因此总复杂度 O(nlog2n).

posted @   snowycat1234  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示