64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
typedef struct node
{
int f,j;
float info;
}node;
int main()
{
int m,n,i,j;
node st[2000],temp;
float result;
while(cin>>m>>n&&m!=-1&&n!=-1)
{
result=0;
for(i=0;i<n;i++)
{
cin>>st[i].f>>st[i].j;
if(st[i].j==0)
st[i].info=1000000000;
else
st[i].info=float(st[i].f)/float(st[i].j);
}
for(i=0;i<n;i++)
for(j=0;j<n-1-i;j++)
{
if(st[j].info<st[j+1].info)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
i=0;
while(i<n)
{
if(m>=st[i].j)
{
result=result+st[i].f;
m=m-st[i].j;
i++;
}
else
{
result=result+st[i].info*m;
break;
}
}
printf("%0.3f\n",result);
}
return 0;
}
if(st[i].j==0)
st[i].info=1000000000;//此数太小,换成更大的,测试数据一般超级反常
else
st[i].info=float(st[i].f)/float(st[i].j);//这里把float换成double提高精度
#include <iostream>
using namespace std;
void Merge(double *Cat,double *Mouse,int start,int middle,int end)
{
double *TempCat=new double [end-start+1];
double *TempMouse=new double [end-start+1];
int i=start,j=middle+1,marker=0;
while (i<=middle&&j<=end)
{
while (Cat[i]/Mouse[i]<=Cat[j]/Mouse[j]&&i<=middle&&j<=end)
{
TempCat[marker]=Cat[i];
TempMouse[marker]=Mouse[i];
++marker;
++i;
}
while (Cat[j]/Mouse[j]<=Cat[i]/Mouse[i]&&i<=middle&&j<=end)
{
TempCat[marker]=Cat[j];
TempMouse[marker]=Mouse[j];
++marker;
++j;
}
}
while (i<=middle)
{
TempCat[marker]=Cat[i];
TempMouse[marker]=Mouse[i];
++marker;
++i;
}
while (j<=end)
{
TempCat[marker]=Cat[j];
TempMouse[marker]=Mouse[j];
++marker;
++j;
}
for (int m=start;m<=end;++m)
{
Cat[m]=TempCat[m-start];
Mouse[m]=TempMouse[m-start];
}
delete []TempCat;
delete []TempMouse;
}
void MergeSort(double *Cat,double *Mouse,int start,int end)
{
if (start<end)
{
int middle=(start+end)/2;
MergeSort(Cat,Mouse,start,middle);
MergeSort(Cat,Mouse,middle+1,end);
Merge(Cat,Mouse,start,middle,end);
}
}
int main()
{
int N;
double M;
while(scanf("%lf%d",&M,&N)!=EOF&&N!=-1)
{
double *Cat=new double [N];
double *Mouse=new double [N];
for (int i=0;i<=N-1;++i)
{
scanf("%lf%lf",&Mouse[i],&Cat[i]);
}
MergeSort(Cat,Mouse,0,N-1);
int j=0;
double Result=0;
for (j=0;j<=N-1;++j)
{
if (M-Cat[j]>=0)
{
M=M-Cat[j];
Result+=Mouse[j];
}
else
{
Result+=M*Mouse[j]/Cat[j];
printf("%.3f\n",Result);
break;
}
}
}
}
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
int m,n,i,j,num;
int residual,a[2002];
double max,sum,b[1000];
while (cin>>m>>n)
{
sum=0;residual=m;num=n;
if(m==-1&&n==-1)exit(0);
for (i=0;i<n*2;i++)
scanf("%d",&a[i]);
for(i=0,j=0;i<n;i++,j=j+2)
b[i]=(double)a[j]/a[j+1];
while (residual>0&&num>0)
{
max=b[0];j=0;
for (i=1;i<n;i++)
{
if(b[i]>max)
{
max=b[i];
j=i;
}
}
if(residual>=a[j*2+1])
{
residual-=a[j*2+1];
sum+=a[j*2];
b[j]=0;
}
else
{
sum=sum+(double)residual*a[j*2]/a[j*2+1];
residual=0;
}
num--;
}
printf("%.3f\n",sum);
}
return 0;
}