题目描述
因为奶牛们的节食运动(奶牛还节食?)给农夫JOHN余下了一大批干草无法处理,所以他准备要开一个拍卖会去出售他的干草。
他有N(1≤N≤1000)批干草(每批大约100捆)。他的客户有M个(1≤M≤1000),都是和他相邻的农夫。第i名农夫会告诉农夫JOHN他会为农夫JOHN的每批干草付Pi的钱(1≤Pi≤1,000,000)。每个农夫都想买(也只想买)农夫JOHN的一批草料。
为了确保农夫们不会互相嫉妒,所以农夫JOHN决定要以一个固定的价格出售他的草料。每一个出价比农夫JOHN的要价要高的农夫将会买到草料,余下的将会被拒绝购买:<
请你帮助农夫JOHN找出能让他赚到最多的钱的最低的单批草料的售价。
输入格式
第一行:两个被空格隔开的整数N和M;
第二行到第M+1行:第i+1行只包含一个整数:Pi 。
输出格式
一行由空格隔开的两个整数:农夫JOHN能出的每批草料的最低价格,以及他能赚到的最多的钱。
样例输入
5 4
2
8
10
7
样例输出
7 21
问题提示
【输入样例解释说明】
农夫JOHN有5批草料,4个农夫想要购买。他们出价分别为:每批草料为2,8,10和7。
【输出样例解释说明】
农夫JOHN应该把价格设定为7,这样会有3个农夫会付钱买草料,农夫JOHN自己会挣到21的钱。
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int main()
{
//1.定义
int n,m,i,ans=0,cur;//总草料,总人数,自变量,答案
//2.输入信息
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
//3.排序
sort(a+1,a+m+1,greater<int>());//从大到小排序
//4.核心逻辑(打擂台找最大值)
for(int i=1;i<=m;i++)
{
if(i>n) break;
if(ans<=i*a[i])
{
ans=i*a[i];
cur=a[i];
}
}
//5.输入结果
cout<<cur<<" "<<ans;
return 0;
}