while循环里面else那个ans += n * t[i].p
因为你还需要买n牛奶就够了,还有while循环条件改成n>0防止0,0的情况
by whoami096 @ 2022-04-01 11:18:55
我前面和你很像
但是while哪里我是这么写的:
```
sort (a + 1, a + n + 1, cmp);
int cur = 0, M = 0, h = 0;//h为目前牛奶量的总和,M为目前所需的钱
while (h < n)
{
cur++;
h += a[cur].num;//num是数量
M += a[cur].num * a[cur].s;//s是钱
}
if (h > n) M -= (h - n) * a[cur].s;
cout << M << endl;
```
cmp我是这么写的
```
bool cmp(Cow x, Cow y)
{
return x.s < y.s;
}
```
by caoshuchen @ 2022-04-06 10:13:48
```
#include <bits/stdc++.h>
using namespace std;
struct Cow
{
int s, num;
void read()
{
cin >> s >> num;
}
};
bool cmp(Cow x, Cow y)
{
return x.s < y.s;
}
Cow a[2000005];
int main()
{
int n, m, h = 0, M = 0;//h为目前牛奶量的总和 M为目前所需的钱
cin >> n >> m;
for (int i = 1; i <= m; i++)
a[i].read();//输入
sort (a + 1, a + n + 1, cmp);//按钱数从小到大排序
int cur = 0;
while (h < n)
{
cur++;
h += a[cur].num;
M += a[cur].num * a[cur].s;
}
if (h > n) M -= (h - n) * a[cur].s;
cout << M << endl;
return 0;
}
```
by caoshuchen @ 2022-04-06 10:20:26