#include #include #include #include #include #include using namespace std; struct elv_info{ int cap; int have; int speed; int stop_time; int pos; }; struct event{ enum{ TOUCHAKU, IDOUKAISI, TENKA, SHOUSITSU, }; int type; int pl[4]; }; event mk_tenka(int flr){ event ret; ret.type=event::TENKA; ret.pl[0]=flr; return ret; } event mk_idou(int ev_no){ event ret; ret.type=event::IDOUKAISI; ret.pl[0]=ev_no; return ret; } event mk_touchaku(int ev_no,int flr){ event ret; ret.type=event::TOUCHAKU; ret.pl[0]=ev_no; ret.pl[1]=flr; return ret; } event mk_shousitsu(int flr) { event ret; ret.type=event::SHOUSITSU; ret.pl[0]=flr; return ret; } int calc_mokuteki(vector &ds,vector &ss) { int n=ds.size(); cerr<<"## "; for (int i=0;i=0;i--) if (!ss[i]&&ds[i]>0) return i; return -1; } int main() { cout<>n>>m,n!=0;){ int d;cin>>d; vector ds(n); for (int i=0;i>ds[i]; vector es; for (int i=0;i>ei.cap; cin>>ei.speed; cin>>ei.stop_time; cin>>ei.pos; ei.pos--; ei.have=0; es.push_back(ei); } int himoto,moe_time,moe_up_time,moe_down_time; cin>>himoto>>moe_time>>moe_up_time>>moe_down_time; himoto--; multimap evs; evs.insert(make_pair(0,mk_tenka(himoto))); for (int i=0;i ss(n,false); vector ssc(n,false); while(!evs.empty()){ double ct=evs.begin()->first; event et=evs.begin()->second; evs.erase(evs.begin()); cerr<<"* "<?=ct+ei.stop_time; ei.have=0; } else{ int tmp=ds[flr]::iterator p=evs.begin(); p!=evs.end();){ if (p->second.type==event::TOUCHAKU&& p->second.pl[1]==flr){ int ev_no2=p->second.pl[0]; double cpos=flr-(double)(flr-es[ev_no2].pos>0?1:-1)* es[ev_no2].speed/d*(p->first-ct); multimap::iterator q=p;q++; evs.erase(p); int moku=calc_mokuteki(ds,ss); if (moku>=0){ cerr<<"cpos : "<=0){ cerr<::iterator p=evs.begin(); p!=evs.end();){ if (p->second.type==event::TOUCHAKU&& p->second.pl[1]==flr){ cerr<<"消失した階に向かっているエレベータにもう行ってもムダだということを教えてあげています"<second.pl[0]; multimap::iterator q=p;q++; evs.erase(p); int moku=calc_mokuteki(ds,ss); cerr<0?1:-1)* es[ev_no2].speed/d*(p->first-ct); if (moku>=0){ cerr<<"cpos : "<