牛客网-2018 美团 CodeM 编程大赛-资格赛-2-可乐
描述
题解
贪心,这里我们其实只用取一种可乐即可,因为可乐是无限的,所以我们只需要简单算一下 max(p∗a[i]+(1.0−p)∗b[i]) m a x ( p ∗ a [ i ] + ( 1.0 − p ) ∗ b [ i ] ) 即可。
代码
#include <iostream>
using namespace std;
const int MAXN = 1e4 + 10;
int n, m, k;
int a[MAXN], b[MAXN];
int main(int argc, const char * argv[])
{
while (cin >> n >> m >> k)
{
for (int i = 1; i <= k; i++)
{
cin >> a[i] >> b[i];
}
int pos = 1;
double p = 1.0 * m / n;
double ans = p * a[1] + (1.0 - p) * b[1];
for (int i = 2; i <= k; i++)
{
double tmp = p * a[i] + (1.0 - p) * b[i];
if (tmp >= ans)
{
ans = tmp;
pos = i;
}
}
for (int i = 1; i <= k; i++)
{
printf("%d%c", i == pos ? n : 0, i == k ? '\n' : ' ');
}
}
return 0;
}