P2637 [USACO08NOV] 第一次,第二次,成交!Going Once, Going Twice, Gone! B
题目描述
因为奶牛们的节食运动给 FJ 余下了一大批干草无法处理,所以他准备要开一个拍卖会去出售他的干草。
他有 nnn 批干草。他的客户有 mmm 个,都是和他一样的农夫。第 iii 名农夫会告诉 FJ 他会为 FJ 的每批干草付 pip_ipi 的钱。每个农夫都想买(也只想买)FJ 的一批草料。
为了确保农夫们不会互相嫉妒,所以 FJ 决定要以一个固定的价格出售他的草料。每一个出价大于等于 FJ 的要价的农夫将会买到草料。
请你帮助 FJ 找出能让他卖出最多的钱的最低的单批草料的售价。
输入格式
第一行:两个被空格隔开的整数 nnn 和 mmm。
第二行到第 m+1m+1m+1 行:第 i+1i+1i+1 行只包含一个整数 pip_ipi。
输出格式
共一行,包含由空格隔开的两个整数:FJ 能出的每批草料的最低价格,以及他能赚到的最多的钱。
输入输出样例 #1
输入 #1
5 4
2
8
10
7
输出 #1
7 21
说明/提示
样例解释
FJ 有 555 批草料,444 个农夫想要购买。他们出价分别为:每批草料为 222,888,101010 和 777。
FJ 应该把价格设定为 777,这样会有 333 个农夫会付钱买草料,FJ 自己会挣到 212121 的钱。
数据规模与约定
对于 100%100\%100% 的数据,1≤m,n≤10001\leq m, n\leq 10001≤m,n≤1000,1≤pi≤1,000,0001\leq p_i\leq 1,000,0001≤pi≤1,000,000。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; // 严格要求
ll a[1000100];
int main(){
ios :: sync_with_stdio(0); // 提高cin、cout的运行速度
ll n, m, maxn = -1e9, mx = -1;
cin >> n >> m;
for(ll i = 1; i <= n; i++){
cin >> a[i];
}
sort(a + 1, a + 1 + n);
for(ll i = 1; i <= n; i++){ //循环枚举定价
ll cnt = 0;
for(ll j = i; j <= n; j++){ //比定价高 或者相等
cnt += a[i];
}
if(cnt > maxn){ //出现最大的钱
mx = a[i]; //当前定价
maxn = cnt;
}
}
cout << mx << " " << maxn << endl;
return 0;
}
拍卖干草的最佳定价策略
449

被折叠的 条评论
为什么被折叠?



