除了第二个点其他都过了
#include<bits/stdc++.h>
using namespace std;
struct AC{
int n;float v;//质量,单价
}ac[100005];
bool pd(AC a,AC b)
{
return a.v>b.v;
}
int main()
{
int N,T;
float m,v;
cin >> N >> T;
for(int i = 1; i <= N;i++)
{
cin >> m >> v;//输入质量总价
ac[i].n = m;//记录质量
ac[i].v = v / (float)m;//记录单价
}
sort(ac+1,ac+N,pd);//按照单价排序
int sum = 0,pos = 1;
float ans = 0.0;
while(pos <= N)
{
sum += ac[pos].n;ans += (ac[pos].v * ac[pos].n * 1.0);//累加结果
if(sum>=T){ans = ans + (T - sum + ac[pos].n)*1.0*ac[pos].v - ac[pos].v * ac[pos].n;break;}//如果质量满了就break,减去多余的质量
pos++;
}
if(ans > 0.0)
printf("%0.2f",ans);
else
cout << "0.00";
return 0;
}