其他分享
首页 > 其他分享> > D - Powerful Discount Tickets

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


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:


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

 

标签:Tickets,yen,1000000000,Powerful,Sample,Discount,item,Input,Copy
来源: https://blog.csdn.net/weixin_44423850/article/details/100901180