建议降红
查看原帖
建议降红
727101
Jin_Yichen楼主2023/2/26 21:14

个人想法:这道题其实很简单,只需要sort一下,再用while循环进行小数求解就行了。(代码如下,dalao勿喷)

struct mj{
	double mi,vi;
	double w;
}a[105];
int main()
{
	double n,t;
	double ans=0;
	cin>>n>>t;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].mi>>a[i].vi;
		a[i].w=a[i].mi/a[i].vi;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=n;j>i;j--)
		{
			if(a[j].w<a[j-1].w)
			swap(a[j],a[j-1]);
		}
	}
	int i=1;
	while(t>=0&&i<=n)
	{
		if(t-a[i].mi>=0)
		t-=a[i].mi,ans+=a[i].vi;
		else
		ans+=(t/a[i].mi)*a[i].vi,i=n;
		i++;
	}
	printf("%.2lf",ans);
	return 0;
}
2023/2/26 21:14
加载中...