奶牛大学(2023寒假每日一题 6)

时间:2023-02-26 13:57:17


Farmer John 计划为奶牛们新开办一所大学!

奶牛大学(2023寒假每日一题 6)

每头奶牛最多愿意支付 奶牛大学(2023寒假每日一题 6)

Farmer John 可以设定所有奶牛入学需要支付的学费。

如果这笔学费大于一头奶牛愿意支付的最高金额,那么这头奶牛就不会入学。

Farmer John 想赚尽可能多的钱,从而可以给他的讲师提供一笔可观的工资。

请求出他能赚到的钱的数量,以及此时应当收取多少学费。

输入格式
输入的第一行包含 奶牛大学(2023寒假每日一题 6)

第二行包含 奶牛大学(2023寒假每日一题 6) 个整数 奶牛大学(2023寒假每日一题 6),其中 奶牛大学(2023寒假每日一题 6) 是奶牛 奶牛大学(2023寒假每日一题 6)

输出格式
输出 Farmer John 可以赚到的最大金额以及最优情况下他应该收取的学费。如果有多个解,输出收取学费最小的解。

注意这个问题涉及到的整数可能需要使用 64 位整数型(例如,Java 中的 “long”,C/C++ 中的 “long long”)。

数据范围
奶牛大学(2023寒假每日一题 6)

输入样例:

4
1 6 4 6

输出样例:

12 4

样例解释
如果 Farmer John 收费 奶牛大学(2023寒假每日一题 6),那么 奶牛大学(2023寒假每日一题 6) 头奶牛将会入学,从而使他赚取 奶牛大学(2023寒假每日一题 6)


#include<iostream>
#include<algorithm>

using namespace std;

typedef long long LL;

const int N = 100010;

int a[N];

int main(){

int n;
scanf("%d", &n);

for(int i = 0; i < n; i++) scanf("%d", &a[i]);

sort(a, a + n, greater<int>());

LL res = 0, val = 0;
for(int i = 0; i < n; i++){
LL x = (LL)(i + 1) * a[i];
if(res <= x) res = x, val = a[i];
}

printf("%lld %lld\n", res, val);

return 0;
}