这题主要就是考虑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. poj 2828(线段树 逆向思考) 插队是不好的行为

    http://poj.org/problem?id=2828 插队问题,n个人,下面n行每行a,b表示这个人插在第a个人的后面和这个人的编号为b,最后输出队伍的情况 涉及到节点的问题可以用到线段树,这 ...

  2. JVM 类加载器 (二)

    1.类加载器(ClassLoader)负责加载class文件,class文件在文件开头有特定的文件标识,并且ClassLoader只负责 class 文件的加载,至于class文件是否能够运行则由Ex ...

  3. APP强制退出

    第一种方法: 企业版可以用,Appstore可能被拒,慎用 - (void)exitApplication { AppDelegate *app = [UIApplication sharedAppl ...

  4. Unknown type name 'NSString' 解决方案

    今天看到个问题,编辑工程提示Unknown type name 'NSString',如下图 导致出现异常的原因是是因为工程中添加了ZipArchive(第三方开源解压缩库) 一般情况下出现“Unkn ...

  5. 抽屉效果几大github第三方库

    首先感谢董铂然博客园,鄙人收藏学习之用,如有朋友看到.有需要请直接前往董铂然博客园本文, 请点击查看原文 在公司项目新版本方案选择中,对主导航中要使用的抽屉效果进行了调研.主要原因是旧的项目中所用的库 ...

  6. Serial-mcu

    任务: PC按下1键, mcu连续发送a, 当PC按下2键, 终止发送 查询: #include <reg52.h> #define uint unsigned int #define u ...

  7. Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...

  8. centos6.5虚拟机每次都要ifup eth0的解决办法

    修改文件/etc/sysconfig/network-scripts/ifcfg-eth0把ONBOOT=no改ONBOOT=yes

  9. Struct配置

    这里只是写到配置方法: 第一步:LoginAction: package com.inspur.actions; import javax.servlet.http.HttpServletReques ...

  10. 使用django发送邮件(smtp)

    首先在 seeting 最下面+上 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_USE_TLS = False ...