D - Powerful Discount Tickets

D - Powerful Discount Tickets


Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 400400 points

Problem Statement

Takahashi is going to buy NN items one by one.

The price of the ii-th item he buys is AiAi yen (the currency of Japan).

He has MM discount tickets, and he can use any number of them when buying an item.

If YY tickets are used when buying an item priced XX yen, he can get the item for X2YX2Y (rounded down to the nearest integer) yen.

What is the minimum amount of money required to buy all the items?

Constraints

  • All values in input are integers.
  • 1≤N,M≤1051≤N,M≤105
  • 1≤Ai≤1091≤Ai≤109

Input

Input is given from Standard Input in the following format:

NN MM
A1A1 A2A2 ...... ANAN

Output

Print the minimum amount of money required to buy all the items.


Sample Input 1 Copy

Copy

3 3
2 13 8

Sample Output 1 Copy

Copy

9

We can buy all the items for 99 yen, as follows:

  • Buy the 11-st item for 22 yen without tickets.
  • Buy the 22-nd item for 33 yen with 22 tickets.
  • Buy the 33-rd item for 44 yen with 11 ticket.

Sample Input 2 Copy

Copy

4 4
1 9 3 5

Sample Output 2 Copy

Copy

6

Sample Input 3 Copy

Copy

1 100000
1000000000

Sample Output 3 Copy

Copy

0

We can buy the item priced 10000000001000000000 yen for 00 yen with 100000100000 tickets.


Sample Input 4 Copy

Copy

10 1
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000

 

Takahashi将购买N.ñ 物品一个接一个。

该的价格我一世他买的第一项是A i一种一世 日元(日本的货币)。

他有M.中号 折扣票,他可以在购买物品时使用任意数量的票。

如果是Y.ÿ购买价格为X的商品时使用门票X日元,他可以获得X 2 Y的项目X2ÿ (向下舍入到最接近的整数)日元。

购买所有物品所需的最低金额是多少?

#include<bits/stdc++.h>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
	priority_queue<int>q;    //优先队列自动从大到小排序
	int m,n,t;
	cin >>n>>m;
	for(int i=0;i<n;i++){
		cin>>t;
		q.push(t);    //每输入一个数都入队
	}
	long long sum=0;
	while(m){
		t=q.top()/2;
		q.pop();
		q.push(t);
		m--;
	}
	while(!q.empty()){
		sum+=q.top();
		q.pop();
	}
	cout<<sum;    //输出都处理完的总和
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值