首 页 行业热点 新车 试驾评测 养车用车 车型库
当前位置:首页题海拾贝:除2

题海拾贝:除2

2024-01-22 来源:好土汽车网
导读 题海拾贝:除2

1、题目

2、题解 

       这个题也是典型的用大根堆解决的问题,思路就是咱们让这个堆里的最大元素除二。但需要注意的是,如果这个元素除2后还是偶数,需要在放回堆里。

#include<iostream>
#include<queue>
using namespace std;
priority_queue<int> heap;
typedef long long LL;
//别忘了开long long 
//不开long long过不了
LL n, k, sum;
LL x;
//保证sum最小,那么每次除2的对象应该是数组里的最大偶数
int main()
{
	cin >> n >> k;
	for (LL i = 0;i < n;i++)
	{
		//这里没有必要真的搞一个数组出来存储这些数据
		cin >> x;
		if (x%2==0)
		{
			//如果是偶数那么就插入堆
			heap.push(x);
		}
		sum += x;//所有元素之和
	}
	//k次操作
	while (heap.size()&&k--)//要保证我们的heap里有元素
	{
		LL a = heap.top();
		sum -= (a/ 2);
		heap.pop();
		if((a/2)%2==0)//如果该数除以2仍然是偶数,那么就插入回去
		{
			a /= 2;
			heap.push(a);
		}
	}
	cout << sum<<endl;
	return 0;
}

       好了,今天的内容就分享到这,我们下期再见!

 

因篇幅问题不能全部显示,请点此查看更多更全内容