这题主要就是考虑y1两侧的最近的电梯和楼梯

当时主要是考虑  如果电梯在y1和y2中间的话   那么直接做电梯就是最优解   如果在y2右边就用abs去算

然后发现其实只考虑 y1的左右两边的电梯和楼梯即可

一共4种情况 :距离y1最近的左右的电梯  距离y1最近的左右的楼梯

难度不是很大

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn = 1e5+;
long long p1[maxn],p2[maxn];
long long f(long long c[],long long i,long long j,long long k);
long long ll(long long c[],long long i,long long j,long long k);
int main()
{
long long n,m,cl,ce,v,i;
scanf("%lld%lld%lld%lld%lld",&n,&m,&cl,&ce,&v);
for(i=;i<=cl;++i)
{
scanf("%lld",p1+i);
}
for(i=;i<=ce;++i)
{
scanf("%lld",p2+i);
}
// sort(p1+1,p1+cl+1);
// sort(p2+1,p2+ce+1);
long long t,x1,x2,y1,y2;
scanf("%lld",&t);
for(i=;i<=t;++i)
{
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
if(x1 == x2)
{
printf("%lld\n",abs(y1-y2));
continue;
}
long long d1,d2,d3,d4;
d1 = f(p1, , cl,y1);
d2 = ll(p1, , cl,y1);
d3 = f(p2, , ce, y1);
d4 = ll(p2,,ce,y1);
long long s = abs(x2-x1);
if(s%v == )
s = s/v;
else
s = s/v+;
long long s1,s2;
s1 = min(abs(y1-d1)+abs(y2-d1)+abs(x2-x1),abs(y1-d2)+abs(y2-d2)+abs(x2-x1));
s2 = min(abs(y1-d3)+abs(y2-d3)+s,abs(y1-d4)+abs(y2-d4)+s);
long long minn = min(s1,s2);
cout << minn << endl;
}
}
long long f(long long c[],long long i,long long j,long long k)
{
long long mid;
if(j == )
return -1e8;
while(i <= j)
{
mid = (i+j)/;
if(k < c[mid])
{
j = mid-;
}
else if(c[mid] < k)
{
i = mid+;
}
else
return mid;
}
if(i- == )
return c[];
return c[i-];
}
long long ll(long long c[],long long i,long long j,long long k)
{
long long mid;
long long n = j;
if(j == )
return -1e8;
while(i <= j)
{
mid = (i+j)/;
if(k < c[mid])
{
j = mid-;
}
else if(c[mid] < k)
{
i = mid+;
}
else
return mid;
}
if(i>n)
return c[n];
return c[i];
}

codeforces966 A的更多相关文章

随机推荐

  1. Chat room

    /* Vasya has recently learned to type and log on to the Internet. He immediately entered a chat room ...

  2. How to use GM MDI interface for programming

    GM has had its newest programming/J2534 Pass Thru device on the market for some years now. A lot has ...

  3. CH#17C 舞动的夜晚

    原题链接 即求二分图的不可行边数量,因为不保证是完备匹配,所以需要通过网络流求出任意一组最大匹配,并建立新图判断. 建新图:对于跑完网络流的图上已经匹配的边,建立反边:对于没有匹配的边,建立正边(图只 ...

  4. selinux 导致ftp文件夹出错~

    关掉selinux #setenforce 0

  5. ubuntu下为单个网卡配置多个ip

    参考文档: https://www.jb51.net/os/Ubuntu/418951.html https://blog.csdn.net/ying1989920/article/details/4 ...

  6. Behance 大神推荐2019 年所有设计领域的最新趋势!

    昨天国内设计界发生了一则重大新闻! 相信大家应该都听说了吧 Behance挂了··· 继续Pinteres之后 在一个设计师不用上班的周六 我的电脑默默打不开Behance了 也就是说大陆地区的ip地 ...

  7. [Robot Framework] 搭建Robot Framework和RIDE(Robot Framework GUI) 的环境

    在windows x64的环境上进行安装,集成Selenium2和AutoIt的libraries,以下安装步骤在win 7,win 8.1,win 10, win 2012 R2上测试通过 1. 下 ...

  8. python轻量级orm

    python下的orm使用SQLAlchemy比较多,用了一段时间感觉不顺手,主要问题是SQLAlchemy太重,所以自己写了一个orm,实现方式和netsharp类似,oql部分因为代码比较多,没有 ...

  9. js 文件下载 进度条

    js: /** * 下载文件 - 带进度监控 * @param url: 文件请求路径 * @param params: 请求参数 * @param name: 保存的文件名 * @param pro ...

  10. JS高级-String- RegExp- Math- Date:

    1. String: 切割: 将一个字符串,按指定分隔符,切割为多段子字符串 简单切割: 切割符是固定的 var arr=str.split("切割符") 强调: 切割后的结果中, ...