hdu 2570


贪心的经典题型


该死的精度问题,WA了好几次,以后能用乘的绝不用除!!


#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

int main(){
    int n,v,w,k,i;
    int p[111],t[111];
    cin>>k;
    while(k--){
        cin>>n>>v>>w;
        for(i=0;i<n;i++)
            scanf("%d",p+i);
        sort(p,p+n);
        t[0]=p[0]*100;   //保留两位小数点
        w*=100;
        int d=0,kk=1,flag=0;
        for(i=1;i<n;i++){
            t[i]=t[i-1]+p[i]*100;   //本来是 t[i]=(t[i-1]+p[i]*100)/(kk+1); 一直WA
            if(t[i]<=w*(kk+1)){     //改成 w*(kk+1) 就过了
                flag=1;
                kk=i+1;
                d=i;
            }
        }
        if(!flag && t[0]>w)
            cout<<"0 0.00"<<endl;
        else
            printf("%d %.2f\n",kk*v,(double) t[d]/(kk*10000.0));

    }
    return 0;
}


你可能感兴趣的:(HDU)