CF1204B题解

思路

这题所要求的序列,一定包含(设不同的个数为 kk):

1,2,22,23,24,,2k11,2,2^2,2^3,2^4,\cdot\cdot\cdot,2^{k-1}

证明很简单:


证明1

题目说:若 aia_i 在序列中,则 ai2\frac{a_i}{2} 也在序列中(要注意没有 00)。

所以当序列最大正整数 2k2^k,那么这个序列就有 k+1k+1 个不同的数;


接着我们来分析序列和的最大值和最小值怎么求。

显然,题目给的 ll 就是当序列和最小是这个序列数不同的个数,rr 就是当序列和最大是这个序列数不同的个数.

所以我们先往和最小的序列里放上

1,2,,2l11,2,\cdot\cdot\cdot,2^{l-1}

我们为了和最小,所以会用 11 来填充剩余的部分。

答案就是:

2l+nl12^l+n-l-1

再往和最大的序列里放上

1,2,,2r11,2,\cdot\cdot\cdot,2^{r-1}

我们为了和最大,所以会用 2r12^{r-1} 来填充剩余的部分。

答案就是:

2r1+(nr)2r12^r-1+(n-r)\ast 2^{r-1}

代码

#include<bits/stdc++.h>
using namespace std;
int n,l,r,mi,ma;
int main(){
	cin>>n>>l>>r;
	cout<<(1<<l)+n-l-1<<' '<<(1<<r)-1+(n-r)*(1<<(r-1));
	return 0;
}
posted @ 2022-08-21 13:55  fengxiaoyi  阅读(22)  评论(0)    收藏  举报  来源