错误;这题开的结构体应该用double
用int 不对因为结果要的浮点型,如果在中间由整形转化为浮点型很容易错
WA代码
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int n;
int v;
}js[100];
bool cmp(node a,node b)
{
if(b.v/b.n<=a.v/a.n)
return true;
else
return false;
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int w,s;
double y=0;
scanf("%d%d",&w,&s);
for(int i=0;i<s;i++)
{
scanf("%d%d",&js[i].n,&js[i].v);
}
sort(js,js+s,cmp);
/*for(int i=0;i<s;i++)
{
printf("%d %d\n",js[i].n,js[i].v);
}*/
for(int i=0;i<s;i++)
{
if(w>=js[i].n)
{
w-=js[i].n;
y+=1.0*js[i].v;
continue;
}
if(w<js[i].n)
{
y+=(1.0*w*js[i].v)/js[i].n;
w=0;
break;
}
}
printf("%.2lf\n",y);
}
}
下次记住,直接输入的时候就按浮点型输入了
AC代码
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
double n;
double v;
}js[200];
double cmp(node a,node b)
{
return a.v/a.n>b.v/b.n;
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int w,s;
double y=0;
scanf("%d%d",&w,&s);
for(int i=0;i<s;i++)
{
scanf("%lf%lf",&js[i].n,&js[i].v);
}
sort(js,js+s,cmp);
/*for(int i=0;i<s;i++)
{
printf("%lf %lf*\n",js[i].n,js[i].v);
}*/
for(int i=0;i<s;i++)
{
if(w>=js[i].n)
{
w-=js[i].n;
y+=js[i].v;
continue;
}
if(w<js[i].n)
{
y+=(w*js[i].v)/js[i].n;
w=0;
break;
}
}
printf("%.2lf\n",y);
}
}