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

poj 2134 Traffic Lights

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

poj 2134 Traffic Lights

#include <stdio.h>#include <string.h>typedef struct { int tg, tr, init, tc; } tralight;typedef struct { int place, speed, time; } cmd;tralight list[110];int ltpos[110];cmd queue[30010]; int now, add;char sch[110][110][310];int situ (tralight a, int time){    int t = a.tc + time;    t %= (a.tg + a.tr);    if (a.init == 0)    {       if (t >= a.tr) return 1;       else return 0;    }    else    {        if (t >= a.tg) return 0;        else return 1;    }}int main (){    int l, n, i, cp, cs, ct, tp, ts, p, fl, ans; char ar[5];    scanf("%d %d", &l, &n);    memset(ltpos, -1, sizeof(ltpos));    memset(sch, 0, sizeof(sch));    for (i = 0; i < n; i++)    {        scanf("%d %d %d %s %d", &p, &list[i].tg, &list[i].tr, ar, &list[i].tc);        if (ar[0] == 'R') list[i].init = 0;        else list[i].init = 1;        ltpos[p] = i;    }    now = add = 0;    queue[add].place = 0, queue[add].speed = 0, queue[add].time = 0; add++;    sch[0][0][0] = 1;    while (now != add)    {          cp = queue[now].place, cs = queue[now].speed, ct = queue[now].time; now++;          if (cp == l && cs == 1)          {  ans = ct;  break;          }          ts = cs - 1;          if (ts < 0) ts = 0;          tp = cp + cs;          if (ltpos[cp] != -1)          {  if (situ(list[ltpos[cp]], ct) == 0 && cs != 0)     continue;          }          for (i = cp + 1, fl = 0; i < tp; i++)          {   if (ltpos[i] != -1)   {      if (situ(list[ltpos[i]], ct) == 0)      {         fl = 1;         break;      }   }          }          if (fl == 1) continue;          else if (sch[tp][ts][ct + 1] == 0)          {   queue[add].place = tp, queue[add].speed = ts, queue[add].time = ct + 1;   sch[tp][ts][ct + 1] = 1;   add++;          }          ts++;          if (sch[tp][ts][ct + 1] == 0)          {  queue[add].place = tp, queue[add].speed = ts, queue[add].time = ct + 1;  sch[tp][ts][ct + 1] = 1;  add++;          }          ts++;          if (ts > cs + 1) continue;          if (sch[tp][ts][ct + 1] == 0)          {  queue[add].place = tp, queue[add].speed = ts, queue[add].time = ct + 1;  sch[tp][ts][ct + 1] = 1;  add++;          }    }    printf("%dn", ans);    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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