Codeforces Round #531 (Div. 3)E. Monotonic Renumeration

探讨了给定数组条件下,寻找所有合法对应数组的方法。通过分析数组特性,将问题转化为求独立段数量,最终利用数学原理得出解题公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目意思:

给你一个数组,有n个正整数组成。如果满足一下两个规则,那么b数组合法:

规则1:如果ai=aj,那么bi=bj

规则2:for every index i∈[1,n−1]i∈[1,n−1] either bi=bi+1bi=bi+1 or bi+1=bi+1bi+1=bi+1.

现在要求有多少种b数组对应a数组是合法的。

 

解题思路:

 

1.首先,通过分析,得到b数组的性质:b数组是一个单调递增的数组(其中某一段可以相同)

2.假设a数组种有两个数字相同,分别为ai和aj,那么就得到bi=bi+1=...bj(这一段都相同)

3。把所有这些相同的段想象成长度、起始位置和结束为止各不相同的线段覆盖在1~n的段上,然后,让相交的线段(包括端点相碰)的段融合为一个段,问你经过融合以后,有多少个独立的段?

4.答案=2^(独立的段的数量-1),这是因为,两个段之间要么相同,要么相差为1,共有段-1个间隙,更具乘法原理,我们有2^(段-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值