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. pg定时任务创建、查询与删除

    select dbms_job.submit('clean_lcs_staff_cm_relation_job', 'select clean_lcs_staff_cm_relation();','0 ...

  2. zabbix 报警程序

    一,报警程序 本次使用的为onealert http://c.onealert.com/console/ucid/login.jsp 二,服务端安转 下面为他教的怎么安装这个东西 第一步: 找到脚本目 ...

  3. 第十五章:集成JPUSH

    如果不想自己搭建push server,则可以借助于第三方的api来实现push的功能,本文主要介绍ionic如何集成jpush. 具体步骤如下: 创建ionic应用:ionic_jpush. 申请j ...

  4. Git~分支真的很轻

    轻,让人觉得很爽 所有源代码管理工具都有管理分支的功能,git当然也不例外,而且git的分支是非常轻的,不像tfs,svn那样,复制一大堆代码,git只记录变化的内容,有本地分支与远程分支之分,原则上 ...

  5. Best HTTP

    http://blog.csdn.net/u012322710/article/details/52860747 Best HTTP (Pro)  这是一款很多公司都在用的网页插件,感觉确实不错,分P ...

  6. CSS3实现鼠标悬停扩展效果

    我们在做导航标签的时候,有时会出现空间过于拥挤需要隐藏部分内容的情况,所以在这里我自己写了一个鼠标悬停显示扩展内容的效果,如下图所示. 总的来说效果还是比较好实现,但是比较头疼的是三角部分使用了伪元素 ...

  7. angular 首屏优化

    前一段时间把公司的一个angular项目做了一次大的优化,记录一下过程. 起因: 起因是用户反映网站加载时间过长,从loading画面显示到页面可响应要13s,对于一般的页面恐怕没有用户愿意等待这么久 ...

  8. CF 305A——Strange Addition——————【暴力加技巧】

    A. Strange Addition time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. input 标签和a标签实现超链接的区别

    a 标签和 input 标签都可以做链接点击的.代码: ------------------------------------------------------------------------ ...

  10. JavaScript数据类型 数据转换

    JavaScript数据类型分为两种:原始类型和对象类型,原始类型有:number(数字).string(文本).boolean(布尔值).null(空).undefined(未定义):对象类型有:A ...