以为是边界的问题(实际上就是)
特判了n==1后无果
//2023/4/3
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
double num,ans;
struct coin{
double m,v;
double bi;
}a[200];
bool cmp(coin a,coin b)
{
return a.bi>b.bi;
}
int main()
{
int n,t;
cin>>n>>t;
for (int i=1;i<=n;i++)
{
cin>>a[i].m>>a[i].v;
a[i].bi=a[i].v/a[i].m;
}
if(n==1)
{
if(t>=a[1].m)
{
printf("%.2f",a[1].m);
return 0;
}
else
{
double g=a[1].bi*t;
printf("%.2f",g);
return 0;
}
}
sort(a+1,a+1+n,cmp);
double kg=0;
int k=1;
while(kg<t)
{
kg+=a[k].m;
ans+=a[k].v;
k++;
}
double d=kg-a[k-1].m;
double e=t-d;
double f=e*a[k-1].bi;
ans-=a[k-1].v;
ans+=f;
printf("%.2f",ans);
return 0;
}