Codeforces 1204B. Mislove Has Lost an Array 贪心
程序员文章站
2022-05-09 16:23:41
...
题意:给定n,l,r,可以任选序列,序列须满足以下条件:
- 序列中不同的数字数不能少于l,不能超过r
- 序列中的数a[i]要么是1,要么序列中存在a[i]/2
求出序列和的最大值和最小值
思路:可以发现,序列中只有2的k次幂,最小序列即除了1到2的l次幂外其余都是1,最大序列即除了1到2的r次幂外其余都是2的r次幂
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn = 500+5;
int n, l, r;
const int inf = 0x3f3f3f3f;
int main()
{
cin >> n >> l >> r;
int minn = 0, maxx = 0, i = 1;
for (i = 0; i < l; i++) {
minn += 1<<i;
}
minn += n - l;
for (i = 0; i < r; i++) {
maxx += 1<<i;
}
maxx += (n-r)*(1<<i-1);
printf("%d %d\n", minn, maxx);
return 0;
}
上一篇: Oracle常用的单行函数应用技巧总结
下一篇: 为何从没听说过历史上有人刺杀朱元璋?