Cow College
题目描述
农夫约翰 计划为奶牛们新开办一所大学!
有 N N N( 1 ≤ N ≤ 1 0 5 1 \le N \le 10^5 1≤N≤105)头奶牛可能会入学。每头奶牛最多愿意支付 c i c_i ci 的学费( 1 ≤ c i ≤ 1 0 6 1 \le c_i \le 10^6 1≤ci≤106)。农民约翰可以设定所有奶牛入学需要支付的学费。如果这笔学费大于一头奶牛愿意支付的最高金额,那么这头奶牛就不会入学。农民约翰想赚尽可能多的钱,从而可以给他的讲师提供一笔可观的工资。请求出他能赚到的钱的数量,以及此时应当收取多少学费。
输入格式(从终端 / 标准输入读入):
输入的第一行包含
N
N
N。第二行包含
N
N
N 个整数
c
1
,
c
2
,
…
,
c
N
c_1, c_2, \dots, c_N
c1,c2,…,cN,其中
c
i
c_i
ci 是奶牛
i
i
i 愿意支付的最高学费金额。
输出格式(输出至终端 / 标准输出):
输出 Farmer John 可以赚到的最大金额以及最优情况下他应该收取的学费。如果有多个解,输出收取学费最小的解。
注意这个问题涉及到的整数可能需要使用 64 位整数型(例如,Java 中的 “long”,C/C++ 中的 “long long”)。
输入样例:
4
1 6 4 6
输出样例:
12 4
如果 Farmer John 收费
4
4
4,那么
3
3
3 头奶牛将会入学,从而使他赚取
3
⋅
4
=
12
3\cdot 4 = 12
3⋅4=12 的金额。
测试点性质:
测试点 2-4 满足
c
i
≤
1
,
000
c_i \le 1{,}000
ci≤1,000。
测试点 5-8 满足
N
≤
5
,
000
N \le 5{,}000
N≤5,000。
测试点 9-12 没有额外限制。
供题:Freddie Tang
分析
题目很简单,可以用排序
+
+
+打擂台的方式。先将所以读入的数据排序(建议用sort),再打擂台比较,最后输出。(切记要使用long long存储)
代码如下(实测100分)。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
long long n, a[MAXN], ans1 = -1, ans2;
int main(){
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++){
long long num = (n - i + 1) * a[i];
if (num > ans1){
ans1 = num;
ans2 = a[i];
}
}
cout << ans1 << " " << ans2 << endl;
return 0;
}