欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}