F运输【noip模拟赛2】

描述

现在商品都已经装好了。搬家公司的老板Mr.B先生走了过来。他告诉我们今天是他的生日,他特别高兴。本来决定免费运输的,但是因为某些因素他改变了主意。现在已知N件商品,和搬运它们其中每一件的费用。现在Mr.B决定让我们每次任意选取2件商品。然后这2件商品只算一件商品的费用。但是这个商品的搬运费用是将选出的2个商品的费用之和除以K的运算结果。(K由文件读入)如此反复,直到只收一件商品的钱,这个就是商店要付的费用。掌柜的想尽可能的少付钱,以便将更多的钱捐给希望工程。所以请你帮他计算一下最少只用付多少钱。

输入

n,k

w1,w2,…,wn(每一件商品的搬运费用)

输出

输出一个数字,表示最少付多少钱。

输入样例 1

5 2
1 2 3 4 5

输出样例 1

1

提示

【数据规模】n<=10000,k<=10000

来源:
来自 <http://www.dingbacode.com/contest/19/problem/F>

题解:
每次取最大两个数/2

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include<bits/stdc++.h>
using namespace std;

int main()
{
int n,m;
cin>>n>>m;
int a[20000];
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=n-1;i>=1;i--)
a[i]=(a[i]+a[i+1])/m;
cout<<a[1]<<endl;
return 0;
}