题目链接:
1.luogu
2.codeforces

比赛提交能一次过,说明这道题很水

题目不解释了,大家应该看得懂,我就说说看我的思路吧

思路:

  1. 他要求求最小值和最大值。那么,我把最小值全部赋值为1,最大值全部赋值为$2^n$
  2. 对于最小值来说,是否满足他$l$的条件呢?如果$l>1$,我们就加上他的差额
  3. 同理,对于最大值来说,是否满足$r$的条件呢?如果不满足,我们就减去差额

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<bits/stdc++.h>
using namespace std;
int n,l,r;
long long mini,maxi,tmp;
long long quick_pow(long long a) {
long long ans=1;
for(int i=1;i<=a;i++)
ans*=2;
return ans;
}
int main() {
scanf("%d%d%d",&n,&l,&r);
mini=n;tmp=quick_pow(r-1);maxi=tmp*n;
for(int i=1;i<l;i++)
mini+=quick_pow(i)-1;
for(int i=1;i<r;i++)
maxi-=tmp-quick_pow(i-1);
printf("%I64d %I64d",mini,maxi);
return 0;
}

Note:CF的long long输出要用%I64d