栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3930 Elevator

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3930 Elevator

#include <iostream>#include <cstdio>#include <memory.h>#include <algorithm>using namespace std;const int maxn = 102;struct instuction{    int t,up;    int fr,to;    bool operator < (const instuction &other) const       {        if(t == other.t)        { return up > other.up;        }        return t < other.t;    }}ins[maxn];int wait[maxn >> 1][2][maxn],num[maxn >> 1][2],inside[maxn >> 1];  int n,layer,ti;  void read(){    memset(wait,0,sizeof(wait));    memset(num,0,sizeof(num));    memset(inside,0,sizeof(inside));    scanf("%d %d",&layer,&n);    for(int i=0;i<n;i++)    {        scanf("%d %d %d",&ins[i].t,&ins[i].fr,&ins[i].to);        ins[i].up = (ins[i].fr <= ins[i].to);    }    sort(ins , ins + n);    return;}bool check(int d)   {    if(d == 1)    {        for(int i=layer+1;i<=50;i++)        { if(num[i][0] || num[i][1] || inside[i]) {     return false; }        }        return true;    }    if(d == 0)    {        for(int i=layer-1;i>0;i--)        { if(num[i][0] || num[i][1] || inside[i]) {     return false; }        }        return true;    }}void solve(){    int l = 0,dir = -1;      bool idle = true,close = true,run = false;      while(l < n || !idle)    {        if(idle)        { idle = false; ti = ins[l].t; continue;        }        while(l < n && ins[l].t <= ti)          { wait[ins[l].fr][ins[l].up][num[ins[l].fr][ins[l].up]] = ins[l].to; num[ins[l].fr][ins[l].up]++; l++;        }        if(dir == -1)          { if(num[layer][1]) dir = 1; else if(num[layer][0]) dir = 0; else {     for(int i=layer+1;i<=50;i++)     {         if(num[i][1] || num[i][0])         {  dir = 1;  break;         }     }     if(dir == -1)     {         for(int i=layer-1;i>0;i--)         {  if(num[i][1] || num[i][0])  {      dir = 0;      break;  }         }     }     if(dir == -1)     {         run = false;         idle = true;     } } continue;        }        if(num[layer][dir] || inside[layer] || close == false)          { if(close) {     close = false;     if(run) printf("%02d:%02d The elevator stops at floor %d.n",ti / 60 , ti % 60 , layer);     printf("%02d:%02d The elevator door is opening.n",ti / 60 , ti % 60);     run = false;     ti++; } else if(inside[layer]) {     printf("%02d:%02d %d people leave the elevator.n",ti / 60 , ti % 60 , inside[layer]);     ti++;     inside[layer] = 0;     if(check(dir)) dir = -1; } else if(num[layer][dir]) {     for(int i=0;i<num[layer][dir];i++)     {         inside[wait[layer][dir][i]]++;     }     printf("%02d:%02d %d people enter the elevator.n",ti / 60 , ti % 60 , num[layer][dir]);     ti++;     num[layer][dir] = 0; } else {     close = true;     printf("%02d:%02d The elevator door is closing.n",ti / 60 , ti % 60);     ti++; }        }        else if(dir == 1)          { if(check(dir) == false) {     if(run == false)     {         printf("%02d:%02d The elevator starts to move up from floor %d.n",ti / 60 , ti % 60 , layer);         run = true;     }     ti++;     layer++; } else dir = -1;        }        else { if(check(dir) == false) {     if(run == false)     {         printf("%02d:%02d The elevator starts to move down from floor %d.n",ti / 60 , ti % 60 , layer);         run = true;     }     ti++;     layer--; } else dir = -1;        }    }    printf("%02d:%02d The elevator door is closing.nn",ti / 60 , ti % 60);        return;}int main(){    int cas;    scanf("%d",&cas);    for(int i=1;i<=cas;i++)    {        printf("Case %d:n",i);        read();        solve();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号