【枚举】教主的花园
来源:互联网 发布:乐秀rx5数据 编辑:程序博客网 时间:2024/05/26 09:54
教主的花园
(p1.pas/cpp/in/out)
【问题背景】
LHX教主最近总困扰于前来膜拜他的人太多了,所以他给他的花园加上了一道屏障。
【问题描述】
可以把教主的花园附近区域抽像成一个正方形网格组成的网络,每个网格都对应了一个坐标(均为整数,有可能为负),若两个网格(x1, y1),(x2, y2)有|x1 – x2| + |y1 – y2| = 1,则说这两个网格是相邻的,否则不是相邻的。
教主在y = 0处整条直线上的网格设置了一道屏障,即所有坐标为(x, 0)的网格。当然,他还要解决他自己与内部人员的进出问题,这样教主设置了N个入口a1, a2, …, aN可供进出,即对于y = 0上的所有网格,只有 (a1, 0),(a2, 0), ……, (aN, 0) 可以通过,之外的所有纵坐标为0的网格均不能通过,而对于(x, y)有y不为0的网格可以认为是随意通过的。
现在教主想知道,给定M个点对(x1, y1),(x2, y2),并且这些点均不在屏障上,询问从一个点走到另一个点最短距离是多少,每次只能从一个格子走到相邻的格子。
【输入格式】
输入的第1行为一个正整数N,为屏障上入口的个数。
第2行有N个整数,a1, a2, …, aN,之间用空格隔开,为这N个入口的横坐标。
第3行为一个正整数M,表示了M个询问。
接下来M行,每行4个整数x1, y1, x2, y2,有y1与y2均不等于0,表示了一个询问从(x1, y1)到(x2, y2)的最短路。
【输出格式】
输出共包含m行,第i行对于第i个询问输出从(x1, y1)到(x2, y2)的最短路距离是多少。
【样例输入】
2
2 -1
2
0 1 0 -1
1 1 2 2
【样例输出】
4
2
【数据规模】
对于20%的数据,有n,m≤10,ai,xi,yi绝对值不超过100;
对于40%的数据,有n,m≤100,ai,xi,yi绝对值不超过1000;
对于60%的数据,有n,m≤1000,ai,xi,yi绝对值不超过100000;
对于100%的数据,有n,m≤100000,ai,xi,yi绝对值不超过100000000。
悲剧爆零在水题上,只因为二分前没有排序。。。这是一个惨痛的教训。
二分怎么敢不排序!!!
#include <cstdio>#include <algorithm>using std::sort;using std::abs;using std::min;using std::lower_bound;using std::upper_bound;long getint(){long rs=0;bool sgn=1;char tmp;do tmp = getchar();while (!isdigit(tmp)&&tmp-'-');if (tmp == '-'){tmp=getchar();sgn=0;}do rs=(rs<<3)+(rs<<1)+tmp-'0';while (isdigit(tmp=getchar()));return sgn?rs:-rs;}long a[100010];int main(){freopen("p1.in","r",stdin);freopen("p1.out","w",stdout);long n = getint();for (long i=1;i<n+1;i++){a[i] = getint();}sort(a+1,a+1+n);long m = getint();for (long l=1;l<m+1;l++){long x1,y1,x2,y2;x1 = getint();y1 = getint();x2 = getint();y2 = getint();if ((y2>0)^(y1>0)){if (x1 > x2){x1 ^= x2;x2 ^= x1;x1 ^= x2;}long l = lower_bound(a+1,a+1+n,x1)-a;long r = upper_bound(a+1,a+1+n,x2)-a;if (l < r){printf("%ld\n",abs(x1-x2)+abs(y1-y2));}else if(l == r){l --;long ans = 0x7f7f7f7f;if (l > 0)ans = min(ans,x1-a[l]+x2-a[l]+abs(y1-y2));if (r < n+1)ans = min(ans,a[r]-x1+a[r]-x2+abs(y1-y2));printf("%ld\n",ans);}}else{printf("%ld\n",abs(x1-x2)+abs(y1-y2));}}return 0;}
- 【枚举】教主的花园
- 教主的花园
- 教主的花园
- 【u121】教主的花园
- 【dp】教主的花园
- P1133 教主的花园
- 洛谷1133 教主的花园
- 洛谷 P1133 教主的花园
- 洛谷 P1133 教主的花园
- 洛谷 P1133 教主的花园
- 洛谷 P1133 教主的花园
- JZOJ 1406. 教主的花园
- 【二分】教主的花园解题报告
- 洛谷 P 1133 教主的花园
- 洛谷 P1133 教主的花园(多维DP)
- dp——洛谷P1133 教主的花园
- 你们的“教主”是谁?
- 3343: 教主的魔法
- Bash Shell PS1: 10 Examples to Make Your Linux Prompt like Angelina Jolie
- 学习ldd3--proc文件系统(第七章与第四章)
- 基于LEACH的无线传感器网络路由算法概述
- 学习ldd3--tasklet(第七章)
- 台湾-海洋过程分析研究室--相關研究資源連結
- 【枚举】教主的花园
- 学习ldd3--工作队列(第七章)
- 重庆1辆石油液化气罐车坠崖 已排除爆炸可能-石油液化气罐车-坠崖-爆炸可能
- 学习ldd3--计时、延迟操作(第七章)
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 单元测试101:你测试你的javascript吗?
- Mediator 模式
- 星星
- 学习ldd3--内核定时器(第七章)