POJ 2134
这道题屡交屡错,什么鬼!!!!明明就是一个简单的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的更多相关文章
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
- POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37427 Accepted: 16288 Descr ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- POJ 2739. Sum of Consecutive Prime Numbers
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20050 ...
- POJ 2255. Tree Recovery
Tree Recovery Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11939 Accepted: 7493 De ...
- 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 ...
- poj 2352 Stars 数星星 详解
题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...
随机推荐
- 国外物联网平台初探(五) ——Exosite Murano
定位 Murano是一个基于云的IoT软件平台,提供安全.可扩展的基础设施,支持端到端的生态系统,帮助客户安全.可扩展地开发.部署和管理应用.服务以及联网产品. 功能 Murano平台简化了整个IoT ...
- The Euler function(hdoj --2824-欧拉函数)
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- Node.js:教程
ylbtech-Node.js:教程 1.返回顶部 1. Node.js 教程 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaS ...
- 第18章 Redis数据结构常用命令
18-1 字符串的一些基本命令 18-1 :配置Spring关于Redis字符串的运行环境 <bean id="poolConfig" class="redis.c ...
- [Pulgin] jQuery插件之ajaxFileUpload
一.ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数 ...
- codeforces 712 Memory and De-Evolution
2019-05-19 13:25:37 加油,加油,坚持,坚持!!! 一定要逆推,才可以是最少的次数 更好的方法: https://www.cnblogs.com/ECJTUACM-873284962 ...
- html中常见的小问题(1)
问题:自适应高度的块级元素内添加图片后,其高度会比图片高度多出一块 简单代码如下: <!doctype html> <html> <head> <style& ...
- (转)RabbitMQ学习之消息可靠性及特性
http://blog.csdn.net/zhu_tianwei/article/details/53971296 下面主要从队列.消息发送.消息接收方面了解消息传递过的一些可靠性处理. 1.队列 消 ...
- 创建一个dynamics CRM workflow (一) - Introduction to Custom Workflows
Workflow: Use this process to model and automate real world business processes. These processes can ...
- java真实面试题(2)
1,递归算法的实行过程,一般来说,可以分为()和()两个阶段,若一个问题的求解既可以用递归也可以用递推时,则往往用(),因为().贪婪法是一种()的算法. 答:递归算法分为递推和回归两个阶段,递推效率 ...