利用迭代法能获得更好的时间效率
View Code
1 #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 #define N 1005 5 #define eps 1e-6 6 struct node 7 { 8 double a,b,v; 9 }; 10 node p[N]; 11 int n,k; 12 int cmp(const void *a,const void *b) 13 { 14 node c=*(node *)a; 15 node d=*(node *)b; 16 if(c.v>d.v) 17 return -1; 18 return 1; 19 } 20 double work(double l) 21 { 22 int i; 23 for(i=0;i<n;i++) 24 p[i].v=p[i].a-p[i].b*l; 25 qsort(p,n,sizeof(node),cmp); 26 double suma=0,sumb=0; 27 for(i=0;i<n-k;i++) 28 suma+=p[i].a,sumb+=p[i].b; 29 return suma/sumb; 30 } 31 void solve() 32 { 33 double tmp,ans=0; 34 while(1) 35 { 36 tmp=work(ans); 37 if(fabs(tmp-ans)<eps) 38 break; 39 ans=tmp; 40 } 41 printf("%d\n",(int)(100*(ans+0.005))); 42 } 43 int main() 44 { 45 int i; 46 while(scanf("%d%d",&n,&k)&&(n||k)) 47 { 48 for(i=0;i<n;i++) 49 scanf("%lf",&p[i].a); 50 for(i=0;i<n;i++) 51 scanf("%lf",&p[i].b); 52 solve(); 53 } 54 return 0; 55 }