#include #include #include #include #include #include #include #include #include using namespace std; enum MODE{ARRIVED,STARTED,BURNT}; struct EVENT{ double time; int version; MODE mode; int option; EVENT(){} EVENT(double time, int version, MODE mode, int option) :time(time),version(version),mode(mode),option(option){} }; bool operator>(const EVENT&lhs, const EVENT&rhs){ return lhs.time>rhs.time; } typedef priority_queue,greater > EVENT_Q; enum STATE{MOVE,STAY,DONE}; struct Elevator{ STATE state; double height; int ev_version; double time_to_leave; int load; int capacity; double speed; int stay_time; }; const double EPS = 1.0e-8; #define EQ(x,y) (fabs((x)-(y))>height>>nelevator && height>0 ) { int distance; cin>>distance; vector data(height+1,0); for ( int i=1 ; i<=height ; ++i ) cin>>data[i]; vector lift(nelevator); for ( int i=0 ; i>cur.capacity>>cur.speed>>cur.stay_time>>cur.height; cur.speed/=distance; cur.load=0; cur.state = MOVE; cur.ev_version = 0; } EVENT_Q eq; { int src,t_burn,t_up,t_down; cin>>src>>t_burn>>t_up>>t_down; for ( int i=2 ; i<=height ; ++i ) { int lim = t_burn + (i"<=3 ) target = (int)data.size()-1; double diff=fabs(cur.height-target); assert(!EQ(diff,0)); eq.push(EVENT(cur_time+diff/cur.speed,++cur.ev_version, ARRIVED,i)); } } } prev_time = cur_time; //cout<<"@"<<__LINE__<