Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:现场直播代码In Reply To:现场直播代码 Posted by:BAD_GUY at 2012-08-07 21:26:12 > #include <cstdio> > #include <string.h> > #include <vector> > using namespace std; > inline int abs(int a) {return a>0?a:(-a);} > struct place {int floor,room,time;}; > struct time {int h,m,s;} > struct sche {int code,time;place a,b;}; > struct user > { > int pri; > time start; > vector<place> l; > queue<sche> S; > }U[30]; > int L; > void Input() > { > char buf[10]; > int h,m,s,t; > while(scanf("%s",buf),(buf[0]!='.')) { > U[L].pri=buf[0]-'A'; > scanf("%d:%d:%d",&U[L].start.h,&U[L].start.m,&U[L].start.s); > while(scanf("%s",buf)) { > if(strlen(buf)==1 && buf[0]=='0') break; > scanf("%d",t); > place tmp; > tmp.floor=(buf[0]-'0')*10+buf[1]-'0'; > tmp.room=(buf[2]-'0')*10+buf[3]-'0'; > tmp.time=t; > U[L].l.push_back(tmp); > } > L++; > } > } > sche tmp; > place Room_to_Room(int u,place last,place now) { > tmp.code=1;tmp.a.floor=tmp.b.floor=last.floor; > tmp.a.room=last.room;tmp.b.room=now.room;tmp.time=10; > U[u].S.push(tmp); > return tmp.b; > } > place Room_to_Elevater(int u,place last,place now) { > tmp.code=2;tmp.a.floor=tmp.b.floor=last.floor; > tmp.a.room=last.room;tmp.b.room=0;tmp.time=10; > U[u].S.push(tmp); > return tmp.b; > } > place Elevater_to_Room(int u,place last,place now) { > tmp.code=3;tmp.a.floor=tmp.b.floor=now.floor; > tmp.a.room=0;tmp.b.room=now.room;tmp.time=10; > U[u].S.push(tmp); > return tmp.b; > } > place Floor_to_Floor(int u,place last,place now) { > tmp.code=4;tmp.a.floor=last.floor;tmp.b.floor=now.floor; > tmp.a.room=0;tmp.b.room=0;tmp.time=30*abs(last.floor-now.floor); > U[u].S.push(tmp); > return tmp.b; > } > place Wait_Elevater_queue(int u,place last,place now) { > tmp.code=5;tmp.a.floor=tmp.b.floor=now.floor; > tmp.a.room=0;tmp.b.room=0;tmp.time=-1; > U[u].S.push(tmp); > return tmp.b; > } > place Wait_Room_queue(int u,place last,place now) { > tmp.code=6;tmp.a.floor=tmp.b.floor=now.floor; > tmp.a.room=tmp.b.room=now.room;tmp.time=-1; > U[u].S.push(tmp); > return tmp.b; > } > place IN_Room(int u,place last,place now) { > tmp.code=7;tmp.a.floor=tmp.b.floor=now.floor; > tmp.a.room=tmp.b.room=now.room;tmp.time=now.time; > U[u].S.push(tmp); > return tmp.b; > } > void Exit(int u,place last) { > if(last.floor==1) { > tmp.code=8;tmp.a.floor=1;tmp.b.floor=0; > tmp.a.room=last.room;tmp.b.room=0;tmp.time=30; > U[u].S.push(tmp); > }else { > last=Room_to_Elevater(u,last,last); > place exit; > exit.floor=1;exit.room=0; > last=Floor_to_Floor(u,last,exit); > tmp.code=8;tmp.a.floor=1;tmp.b.floor=0; > tmp.a.room=0;tmp.b.room=0;tmp.time=30; > U[u].S.push(tmp); > } > } > void Init() > { > /* > 0 Entry > 1 Room to Room > 2 Room to Elevater > 3 Elevater to Room > 4 Floor to Floor (IN Elevater) > 5 Wait Elevater queue > 6 Wait Room queue > 7 IN Room > 8 Exit > */ > for(int i=0;i<L;i++) { > tmp.code=0;tmp.a.floor=tmp.a.room=0;tmp.b.floor=1;tmp.room=0;tmp.time=30; > U[i].S.push(tmp); > place last=tmp.b; > if(U[i].l[0].floor==1) { > last=Room_to_Room(i,last,U[i].l[0]); > last=Wait_Room_queue(i,U[i].l[0],U[i].l[0]); > last=IN_Room(i,U[i].l[0],U[i].l[0]); > }else { > last=Wait_Elevater_queue(i,last,last); > last=Floor_to_Floor(i,last,U[i].l[0]); > last=Elevater_to_Room(i,last,U[i].l[0]); > last=Wait_Room_queue(i,U[i].l[0],U[i].l[0]); > last=IN_Room(i,U[i].l[0],U[i].l[0]); > } > for(int j=1;j<U[i].l.size();j++) { > if(U[i].l[j].floor==last.floor) { > last=Room_to_Room(i,last,U[i].l[j]); > last=Wait_Room_queue(i,U[i].l[j],U[i].l[j]); > last=IN_Room(i,U[i].l[j],U[i].l[j]); > }else { > last=Room_to_Elevater(i,U[i].l[j],U[i].l[j]); > last=Wait_Elevater_queue(i,last,last); > last=Floor_to_Floor(i,last,U[i].l[j]); > last=Elevater_to_Room(i,last,U[i].l[j]); > last=Wait_Room_queue(i,U[i].l[j],U[i].l[j]); > last=IN_Room(i,U[i].l[j],U[i].l[j]); > } > } > Exit(i,last); > } > } > sche A[30]; > bool State[30]; > void Calc() > { > int timezone=0; > while(1) { > for(int i=0;i<L;i++) if(!State[i]){ > if(!U[i].S.empty()) { > A[i]=U[i].S.front(); > U[i].S.pop(); > } > } > for(int i=0;i<L;i++) if(!State[i]){ > > }else { > > } > } > } > int main() > { > Input(); > Init(); > Calc(); > Output(); > getchar();getchar(); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator