坑人的库函数。。。。,wa了n次
为什么用自己写的快排就会超时。而用c++ 中sort就可以?
#include<cstdio>
#include<algorithm>
#include<math.h>
using namespace std;
#define exp 1e-8
#define N 100000+16
typedef struct
{
double to;
int v,w,lo;
}Jewel;
int n,k;
Jewel J[N];
int cmp(Jewel x,Jewel y)
{
return x.to>y.to;
}
void qsort(int l,int r)
{
int i,j;
Jewel x;
if(l<r)
{
i=l;
j=r;
x=J[i];
while(i<j)
{
while(i<j&&J[j].to<=x.to)
j--;
if(i<j)
J[i++]=J[j];
while(i<j&&J[i].to>x.to)
i++;
if(i<j)
J[j--]=J[i];
}
J[i]=x;
qsort(l,i-1);
qsort(i+1,r);
}
return ;
}
int main(void)
{
int i;
double ps=1,s=0,m,sv,sw;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d%d",&J[i].v,&J[i].w);
J[i].lo=i+1;
}
while(fabs(s-ps)>exp)
{
for(i=0;i<n;i++)
J[i].to=J[i].v-s*J[i].w;
sort(J,J+n,cmp);//这里我用自己写的qsort(0,n-1) 就会超时。。。。。不懂
sv=0;sw=0;
for(i=0;i<k;i++)
{
sv+=J[i].v;
sw+=J[i].w;
}
ps=s;
s=sv/sw;
}
for(i=0;i<k;i++)
printf("%d ",J[i].lo);
}