Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:现场直播代码

Posted by honcur at 2012-08-08 08:39:20 on Problem 1025
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator