先将所有数按照题意以 vi 为分子 ci 为分母存储,并将所有分数通分(原分子分母我仍然存储了),再按照通分后分子的从大到小排序,此时排序后前 m 个分数的分子的和除以分母的和是否就是所求的答案呢?
蒟蒻以此为思路写的代码只有 40pts。 特求错误原因。
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int N=2e2+10;
struct ST{
int son,ma;
int yson,yma;
bool operator<(const ST &W)
{
return son>W.son;
}
}st[N];
int m,n;
int res=1;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
st[i].yson=read();//原分子
}
for(int i=1;i<=n;i++)
{
st[i].yma=read();//原分母
res*=st[i].yma; //res:通分后的分母
}
for(int i=1;i<=n;i++)
{
st[i].son=(st[i].yson)*(res/st[i].yma);
st[i].ma=res;
}
sort(st+1,st+1+n);
int up=0,down=0;
for(int i=1;i<=m;i++)
{
up+=st[i].yson;
down+=st[i].yma;
}
double ans=(double)(up)/(double)(down);
printf("%.3lf\n",ans);
return 0;
}