CF1295

A

用计算器式显示数字,可以显示 n 段。可以显示的最大数字是多少?

如果用了一个需要至少四段的数字,一定不如把这个替换成两个 1 好。

如果一共可以用偶数个,一定是全部 1

如果一共可以用奇数个,一定是开头一个 7,之后全是 1

B

给定一个 01 序列 skts 的无限重复。求 x 的个数,x 满足:t 的前 x 个元素中的 0 的个数减 1 的个数等于 k.

balance(len)=cnt0,lencnt1,len

注意到 balance(len)=[lenn]×balance(n)+balance(lenmodn).

balance(0n) 可以预处理出来。

我们只需要枚举 i=0n1,判断 xbalance(i) 是否为 balance(n) 的倍数即可。

注意,不仅要判断倍数,还要判断 xbalance(i)balance(n) 是否非负!!!

C

老套路题。

nxtpos,ch 为从 pos 号位置开始,下一个 ch 在哪里出现。

一个贪心:如果遇到一个能匹配当前字符的,就一定要配上。

D

给定 a,m,求所有 x 满足 gcd(a+x,m)=gcd(a,m).

gcd(a+x,m)=gcd(a,m),不妨令 x=(a+x)%m,这样 gcd(a+x,m)=gcd(x,m).

于是现在的问题转化为:gcd(x,m)=gcd(a,m),x[0,m).

gcd(a,m)=g,a=ag,m=mg,因为 gcd(x,m)=g,则 x=xg

此时应有 gcd(x,m)=1,x[0,m),而每一个与 mgcd 等于 1 的数,都可以唯一对应到原问题中的 x

这时问题转化为求 0m1 中和 m 互质的数的个数,发现 1m1 的个数就是 φ(m)

gcd(0,m)=1 是否成立还要看 m=1,但是 m=1 说明 m=g 说明 (a,m)=m 说明 ma 说明 am 矛盾。

所以答案就是 φ(m).

E

给定一个 1n 的排列 p 和一个花费数组 a

可以选一个 k[1,n1]p 分成两半:p1k,pk+1n.

可以选择这两组中的一些元素移动到另外一组,第 i 个元素的移动代价是 ai

经过一些移动后,要求第一组中所有元素都小于第二组中所有元素。如果某一组空了,也满足条件。

求最小代价和。


枚举 k=0n,表示最终我们希望 1k 在第一组中。

t[i] 表示此时把排列分成 1i1,in 两段的最小代价。(此时就是当我们枚举 kk 每变一次都求一次)

对于 k=k 时,t[i]=p[1]p[i1] 中不属于 1k 的元素的代价之和)+(p[i]p[n] 中属于 1k 的元素的代价之和),这时我们知道,如果要 1k 在第一组,答案就是此时的 min(t[2],,t[n])

现在的问题在于,我们不能对每一个 k 都求一次 t 数组,复杂度会爆。

我们发现,当 k1 时,变化其实很少:t[2]t[pos[k+1]]+a[pos[k+1]]t[pos[k+1]+1]t[n]a[pos[k+1]]pos[k+1] 表示在排列中 k+1 的位置。

这是因为如果我们要让 k+1 去第一组,那所有初始没有包含 k+1 的分法,也就是在 2,,pos[k+1] 分开的方法,都需要额外花 a[pos[k+1]] 的代价把 k+1 放到左边。

这可以用线段树维护。区间加 + 区间最小值(求 t 的最小)。

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