noip前练一下码力还是非常有前途的

这道题本来就是想写个大暴力弃疗的,所以直接强上暴力浑身舒爽

结果发现要不是判重的时候脑残了,就能\(A\)了

没什么好说的呀,就是每一次都暴力\(O(n)\)往上下左右扩展状态,之后放到队列里,\(map\)判重就好了

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<map>
#include<cstring>
#define mp std::make_pair
#define re register
#define maxn 4005
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
inline int read()
{
char c=getchar();
int x=0,r=1;
while(c<'0'||c>'9') {if(c=='-') r=-1;c=getchar();}
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x*r;
}
struct node
{
int x,y,step;
};
std::map<std::pair<int,int> ,bool > vis;
inline void GG()
{
puts("0");
exit(0);
}
inline void kill(int a)
{
printf("%d\n",a);
exit(0);
}
int ix[maxn],iy[maxn],Ix[maxn],Iy[maxn];
int n,sx,sy,dx,dy;
inline void BFS()
{
std::queue<node> q;
q.push((node){sx,sy,0});
vis[mp(sx,sy)]=1;
while(!q.empty())
{
node mid=q.front();
q.pop();
int xx=mid.x,yy=mid.y; int pre=-99999999;
for(re int i=1;i<=n;i++)
if(yy>=iy[i]&&yy<=Iy[i]&&Ix[i]<=xx) pre=max(pre,Ix[i]);
if(pre!=-99999999)
{
if(pre!=xx&&!vis[mp(pre+1,yy)])
{
vis[mp(pre+1,yy)]=1,q.push((node){pre+1,yy,mid.step+1});
if(dy==yy&&dx<xx&&xx>=pre+1) kill(mid.step+1);
}
}
else if(dy==yy&&dx<xx) kill(mid.step+1); pre=999999999;
for(re int i=1;i<=n;i++)
if(yy>=iy[i]&&yy<=Iy[i]&&ix[i]>=xx) pre=min(pre,ix[i]);
if(pre!=999999999)
{
if(pre!=xx&&!vis[mp(pre-1,yy)])
{
vis[mp(pre-1,yy)]=1,q.push((node){pre-1,yy,mid.step+1});
if(dy==yy&&dx>xx&&xx<=pre-1) kill(mid.step+1);
}
}
else if(dy==yy&&dx>xx) kill(mid.step+1); pre=-99999999;
for(re int i=1;i<=n;i++)
if(xx>=ix[i]&&xx<=Ix[i]&&Iy[i]<=yy) pre=max(pre,Iy[i]);
if(pre!=-99999999)
{
if(pre!=yy&&!vis[mp(xx,pre+1)])
{
vis[mp(xx,pre+1)]=1,q.push((node){xx,pre+1,mid.step+1});
if(dx==xx&&dy<yy&&dy>=pre+1) kill(mid.step+1);
}
}
else if(dx==xx&&dy<yy) kill(mid.step+1); pre=99999999;
for(re int i=1;i<=n;i++)
if(xx>=ix[i]&&xx<=Ix[i]&&iy[i]>=yy) pre=min(pre,iy[i]);
if(pre!=99999999)
{
if(pre!=yy&&!vis[mp(xx,pre-1)])
{
vis[mp(xx,pre-1)]=1,q.push((node){xx,pre-1,mid.step+1});
if(dx==xx&&dy>yy&&dy<=pre-1) kill(mid.step+1);;
}
}
else if(dx==xx&&dy>yy) kill(mid.step+1);
}
GG();
}
int main()
{
n=read();
sx=read(),sy=read(),dx=read(),dy=read();
for(re int i=1;i<=n;i++) ix[i]=read(),iy[i]=read(),Ix[i]=read(),Iy[i]=read();
BFS();
return 0;
}

【[CTSC2000]冰原探险】的更多相关文章

  1. [题目] Luogu P3716 [CTSC2000]冰原探险

    题面 题目背景 传说中,南极有一片广阔的冰原,在冰原下藏有史前文明的遗址.整个冰原被横竖划分成了很多个大小相等的方格.在这个冰原上有N个大小不等的矩形冰山,这些巨大的冰山有着和南极一样古老的历史,每个 ...

  2. [Ctsc2000]冰原探险

    Description 传说中,南极有一片广阔的冰原,在冰原下藏有史前文明的遗址.整个冰原被横竖划分成了很多个大小相等的方格.在这个冰原上有N个大小不等的矩形冰山,这些巨大的冰山有着和南极一样古老的历 ...

  3. BZOJ 2541: [Ctsc2000]冰原探险

    Descrption 有一些矩形障碍,碰到障碍会停下,求从一个点到另一个点的最少移动步数. Sol BFS. 因为题目的特殊性质,两个矩形没有任何相邻,起始点和终点和矩形没有相邻. 所以从一个点的移动 ...

  4. 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险

    http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. NOIP模拟赛-2018.11.5

    NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...

  7. ASP.NET 5探险(3):使用UMEditor并实现图片上传

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:今天将继续上一篇来讲解百度富文本Web编辑器UEditor或UMEditor的使用. ...

  8. POJ 2431 Expedition(探险)

    POJ 2431 Expedition(探险) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A group of co ...

  9. 读《架构探险——从零开始写Java Web框架》

    内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...

随机推荐

  1. 如何利用工具提高你的 Android 代码质量

    在这篇文章中,我将通过不同的自动化工具如CheckStyle,FindBugs,PMD以及Android Lint来介绍(如何)提高你的安卓代码质量.通过自动化的方式检查你的代码非常有用,尤其当你在一 ...

  2. jenkins~管道Pipeline里使用公用类库

    Pipeline使用了groovy语法,同时可以使用所有jenkins插件在groovy里进行调用,可以说通过UI可以实现的功能使用pipeline也可以实现,这一点我在上一篇文章里已经说明,今天主要 ...

  3. react native 完美解决启动白屏

    先讲下我的RN版本0.58.5 首先安装react-native-splash-screen(目前使用的版本是3.2.0) 项目地址https://github.com/crazycodeboy/re ...

  4. Java学习第二十天

    1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项: A:要有出口,否则就是死递归 B:次数不能过多,否则内存溢出 C:构造方法不能递归 ...

  5. jqGrid 将行的字变成超连接

    今天在项目中碰到要将jqGrid中的行做成超连接,请看代码步骤: name: , align: "left", formatter: function (cellValue, op ...

  6. 【OSI】网络协议模型

    一.网络相关概念 IP地址: 主机 用于 路由寻址  用的数字标识 域名: 便于IP地址记忆 DNS: 通过注册的 域名 指向 ip 的服务 DDNS: 将用户的动态IP地址映射到一个固定的域名解析服 ...

  7. [转]Asp.Net MVC EF各版本区别

    本文转自:http://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC ...

  8. Video标签事件与属性

    事件与属性 属性 描述 audioTracks 返回可用的音轨列表(MultipleTrackList对象) autoplay 媒体加载后自动播放 buffered 返回缓冲部件的时间范围(TimeR ...

  9. artDialog组件应用学习(四)

    一.在对话框自定义操作按钮 预览: html调用代码: var btnArray = [ { value: '同意', callback: function () { this.content('你同 ...

  10. 注解实现AOP

    package com.dch.service.aop; import java.text.SimpleDateFormat; import java.util.Arrays; import java ...