//GNC #include #include #include #include #include #include #include #include #include #include using namespace std; struct job{ int efficiency, needtime, deadline; job(){} job(int e, int n, int d): efficiency(e), needtime(n), deadline(d) {} }; bool jobless (const job& lhs, const job& rhs) { return lhs.deadline < rhs.deadline; } typedef pair gojob; int main(void) { int N; ifstream cin("lazy.in"); while(cin >> N && N){ vector alljobs; for(int i = 0; i < N; ++i){ job j; cin >> j.efficiency >> j.needtime >> j.deadline; alljobs.push_back(j); } sort(alljobs.begin(), alljobs.end(), jobless); int currenttime = 0; double currentmoney = 0; priority_queue gojobs; for(int i = 0 ; i < N ; i ++){ struct job curjob = alljobs[i]; gojobs.push(make_pair(curjob.efficiency,curjob.needtime)); int rest = curjob.needtime + currenttime - curjob.deadline; while(rest > 0){ gojob top = gojobs.top(); gojobs.pop(); if(top.second > rest){ currentmoney += (double)rest / top.first; top.second -= rest; rest = 0; gojobs.push(top); }else{ currentmoney += (double)top.second / top.first; rest -= top.second; } } currenttime = curjob.deadline+rest; } cout.setf(ios::fixed); cout << setprecision(3); cout << currentmoney << endl; } }