Codeforces Round #715 (Div. 1) B. Almost Sorted

题意

一个almost sort 是序列满足 ai+1 >= ai - 1
排序的元素为 1,2,3…n,给定一个k求第k小的almosrt sort 序列。

思路

他有一个性质对于每个点,他之后的点可以是比他小1的
对于这个性质如果我们选了一个k,那之后必须选择 k - 1 到 1之间的没有被选中的序列,要不之后比他大的点无法选择。
所以长度为n的k + 1,k + 2,k + 3…k+n序列的方案数为,
选择k + 1,方案数为 f[n - 1]
选择k + 2 方案数为f[n - 2]

选择k + n 方案数为f[0]
f[n] = ∑f[i] (1 <= i <= n - 1);
所以f[0] = 1 f[1] = 1 f[2] = 2 f[3] = 4
根据数学归纳法f[n]的方案数为 (1 << (n - 1))
之后在每个位置上枚举即可。
注意:n很大,左移可能会因为只用知道相对大小,大于63 使用62代替。

代码

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值