这道题屡交屡错,什么鬼!!!!明明就是一个简单的BFS,啊~!!!!!~~~~~~就是一个简单的BFS!!!!~~~~~什么鬼!!!!!!!

FUCK,在discuss里也很多人吐槽,怪不得那么少人做,什么鬼。。。为了不辜负自己写了一晚,把别人的贴过算了,什么鬼!!!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <string.h>
#include <queue>
using namespace std;
bool vis[105][105][310];
struct Stat{
int pos,sec,pass_light,speed;
Stat(){}
Stat(int p,int s,int pl,int sp){pos=p,sec=s,pass_light=pl;speed=sp;}
};
queue<Stat>que;
struct traffic{
int pos,tg,tr;
int init,ts;
bool operator<(const traffic &a)const{
if(pos<a.pos) return true;
return false;
}
};
int l,n;
traffic light[110]; bool judge(Stat &t,int k){
if(light[k].init==0){
int tl=t.sec+light[k].ts+1;
tl=tl%(light[k].tr+light[k].tg);
if(tl<light[k].tr&&tl!=0){
if(t.speed==0) return true;
return false;
}
return true;
}
else{
int tl=t.sec+light[k].ts+1;
tl=tl%(light[k].tr+light[k].tg);
if(tl>=light[k].tg||tl==0){
if(t.speed==0) return true;
return false;
}
return true;
}
} int main(){
int pos,tg,tr,ts; char st;
while(scanf("%d%d",&l,&n)!=EOF){
memset(vis,false,sizeof(vis));
for(int i=1;i<=n;i++){
scanf("%d %d %d %c %d",&light[i].pos,&light[i].tg,&light[i].tr,&st,&light[i].ts);
light[i].init=st=='R'?0:1;
}
sort(light+1,light+n+1);
Stat tmp(0,0,1,0); Stat f; bool flag; int k;
vis[0][0][0]=true;
que.push(tmp);
while(!que.empty()){
f=que.front();
que.pop();
// cout<<f.pos<<" "<<f.sec<<" "<<f.speed<<endl;
if(f.pos==l&&f.speed==1){
break;
}
int pos=f.pos+f.speed;
if(pos>l) continue;
k=f.pass_light;
flag=true;
while(pos>=light[k].pos&&k<=n){
if(!judge(f,k)){
flag=false;
break;
}
k++;
}
if(flag){
for(int i=-1;i<=1;i++){
if(f.speed==0&&i==-1) continue;
tmp.pos=f.pos+f.speed;
tmp.sec=f.sec+1;
tmp.speed=f.speed+i;
tmp.pass_light=k;
if(!vis[tmp.pos][tmp.speed][tmp.sec]){
vis[tmp.pos][tmp.speed][tmp.sec]=true;
que.push(tmp);
}
}
}
}
printf("%d\n",f.sec);
while(!que.empty()) que.pop();
}
return 0;
}

  

别人的

#include <stdio.h>
#include <cstring>
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("%d\n", ans);
return 0;
}

  

POJ 2134的更多相关文章

  1. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  2. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  3. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  4. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37427   Accepted: 16288 Descr ...

  5. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  6. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  7. POJ 2255. Tree Recovery

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11939   Accepted: 7493 De ...

  8. POJ 2752 Seek the Name, Seek the Fame [kmp]

    Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17898   Ac ...

  9. poj 2352 Stars 数星星 详解

    题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...

随机推荐

  1. javascript中经典继承的兼容写法

    function create(obj) { // 2.1 判断浏览器支持不支持 Object.create // 如果支持,直接使用 Object.create // 如果不支持,自己实现 if(O ...

  2. 管窥python语法

    刚接触python,mark下所见所得: 1.Python调用底层API,可在任何platform上运行,包括Windows.Mac.Unix: 2.用#符号对代码或语句进行注释,#后的代码不被编译: ...

  3. WebService 服务接口

    天气预报Web服务,数据来源于中国气象局Endpoint :http://www.webxml.com.cn/WebServices/WeatherWebService.asmxDisco :http ...

  4. deeplearning4j – 分布式DL开源项目

    原文链接:http://www.52ml.net/16157.html Deeplearning4j is the first commercial-grade deep learning libra ...

  5. javaScript 计算两个日期的天数相差

    一:计算两个日期相差的天数 1 <html> <head> <meta http-equiv="Content-Type" content=" ...

  6. __str__和__repr__

    Python 中的 __str__ 与 __repr__ 到底有什么差别   很多时候我们自己编写一个类,在将它的实例在终端上打印或查看的时候,我们往往会看到一个不太满意的结果. 类默认转化的字符串基 ...

  7. python学习小结

    1学习的课程名字叫什么 python:前端初识html,后台基础flask 2怎么输出一句话,用代码举例 输出用:print 例如: 3使用终端工具怎么运行 Python代码 例如我要运行题目2的程序 ...

  8. JS 100节楼梯,0-49节 分数等于节数 50以后(包括50)每节10分输入节数 得出分数

    var n = parseInt(prompt("请输入数值")); ; ; ){ ; i<n; i++) { sum = sum + i; } alert(sum); } ...

  9. Linux常用命令学习随笔

    1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...

  10. 前端开发—CSS

    CSS 基础概念 致命三问: 它是什么?  层叠样式表,主要作用是对html标签进行装饰. 它的作用:再 html 框架的基础上 ,对标签内容做美化工作. 注释方法:/*单行注释*/ 多行注释同理与h ...