这题主要就是考虑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. PHP 语句 函数 字符串处理

    语句: 一:分支语句 1.if(条件1){满足条件1执行} 2.if(条件1){满足条件1执行}else{不满足条件1执行} 3.if(条件1){满足条件1执行}else if(条件2){满足条件2执 ...

  2. 201621123008 《Java程序设计》第八周学习总结

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: public boolean contains(Object o ...

  3. jQuery操作(一)

    基本语法:$(selector).action() 寻找元素(重要的选择器和筛选器) 一:选择器 1.1 基本选择器: $("*") $("#id") $(&q ...

  4. 基于centos6.5 hadoop 集群搭建

    1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/hosts里面要配置 ...

  5. openssl AES加密

    此代码不涉及ECB和CBC等关联加密 #include <stdio.h> #include <string.h> #include <stdlib.h> #inc ...

  6. SQL将完整时间字段截取到年月日

    在SQL查询语句中使用convert(char(10),日期字段,120)方法 1.char(10)指'yyyy-mm-dd'正好10个字符 2.120的是日期的格式 3.使用语句:select * ...

  7. 在Eclipse中运行JAVA代码远程操作HBase的示例

    在Eclipse中运行JAVA代码远程操作HBase的示例 分类: 大数据 2014-03-04 13:47 3762人阅读 评论(2) 收藏 举报 下面是一个在Windows的Eclipse中通过J ...

  8. 得到一个Object的属性

    private static object GetPropertyValue(object obj, string property) { System.Reflection.PropertyInfo ...

  9. Hadoop3集群搭建之——安装hadoop,配置环境

    接上篇:Hadoop3集群搭建之——虚拟机安装 下篇:Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简单操作 上篇已 ...

  10. 2019.01.14 bzoj4530: [Bjoi2014]大融合(线段树合并)

    传送门 线段树合并菜题. 题意简述:nnn个点,支持连边以及查询一个点所在连通块中经过这个点的路径条数,保证这张图时刻为森林. 思路: 先建出所有操作完之后的树统计出dfsdfsdfs序 注意有可能是 ...