cf823div2B

题目链接

题目大意

多组测试数据,有\(n\)个点在数轴上,他们想要集会,每个点到目标点\(y\)的时间为$$t_i+|x_i-y|$$

试求所有点到\(y\)中最长时间的最小值。

思路

一共有三种解法。

一,枚举时间二分,对于每个时间,去判断每个\(x_i\)所能到达的地方。会得到一个一个区间。当最小的区间右端点和最大的区间左端点恰有交集的点就是我们的目标。

二,三分地点,这个只是大概思路,没有细想,但是有题解是这样做的

三,转化。对于每个\(x_i\)可以分成两个点\(x_i-ti,xi+ti\)。这样整个区间会出现\(2n\)个点。可以证明,答案\(y\)一定位于这些点构成的区间之中。先考虑一般情况,\(y=(x_{min}^`+x_{max}^`)/2\)

这个结论对于\(y\)位于扩展到两个\(x_i\)中间是很容易成立的。再考虑特殊情况。假设\(x_{max}^`\)对应的\(x_i\)在\(y\)的左边,那么可以得到最小的那个 \(x_{min}^、\) 一定也是\(x_i\)扩展的。换句话说,\(y\)点一定是和\(x_i\)重合,同上面公式相同。

代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
#define rep(i,l,n) for(int i=(l);i<=(n);++i)
#define ll long long
#define N 100005
using namespace std;
double eps=1e-9;
int t,n;
int x[N],a[N];
double pd(int x)
{
double ans=0;
rep(i,1,n)
{
ans=max(ans,fabs(x-i)+a[i]);
}
return ans;
}
void solve()
{
scanf("%d",&n);
rep(i,1,n)scanf("%d",&a[i]);
rep(i,1,n)scanf("%d",&x[i]);
vector<int> g;
rep(i,1,n)
{
g.push_back(a[i]-x[i]);
g.push_back(a[i]+x[i]);
}
int mn=g.front(),mx=g.front();
for(auto xi:g)
{
mn=min(xi,mn);
mx=max(xi,mx);
}
printf("%d",(mx+mn)/2);
if((mn+mx)&1)printf(".5");
cout<<endl;
return ;
}
int main()
{
scanf("%d",&t);
while(t--)
{
solve();
}
system("pause");
return 0;
}

CF823div2B的更多相关文章

随机推荐

  1. linux安装EMQ

    1.拉取Emqx包 wget https://www.emqx.com/zh/downloads/broker/4.2.14/emqx-centos7-4.2.14-x86_64.rpm 2.安装服务 ...

  2. android cannot generate view binders android.databinding.tool.util.LoggedErrorException

    错误: Cannot resolve type 'viewModel'错误: cannot generate view binders android.databinding.tool.util.Lo ...

  3. JAI 多图片合成TIF格式

    因为项目需要,所以要做这么个工具类,发现了一些问题,接下来一一说明. 需要引入jai-codec-1.1.3.jar跟jai_code-1.1.3.jar. 1.判断图片格式: JPEG (jpg), ...

  4. 常用的Linux命令与它们的功能

    概要 filename 文件名 dir 文件夹名 string 字符串 username 用户名 groupname 组名 regex 正则表达式 path 路径 partition 分区名 port ...

  5. ubuntu扩容

    VMware虚拟机 Linux系统 Ubuntu 16.04 硬盘/磁盘扩容效果查看硬盘大小及使用情况 终端:df -h 没有扩容前: 成功扩容后: 主要流程扩展硬盘大小到100G将未分配的60G分配 ...

  6. nginx的301与302跳转详细配置教程

    什么是301跳转 301跳转也叫301重定向,也叫301转向,也叫301永久重定向,是网站建设过程中的一个功能.一般用于2个域名指向同一个网站. 一般来说,利用跳转,对网站的排名不会有影响.但不会转移 ...

  7. PyMySQL查询

    title: PyMySQL查询 author: 杨晓东 permalink: PyMySQL查询 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - ...

  8. Kubernetes之Pod详解

    1.Pod生命周期 pod创建 1. API Server 在接收到创建pod的请求之后,会根据用户提交的参数值来创建一个运行时的pod对象. 2. 根据 API Server 请求的上下文的元数据来 ...

  9. docker命令自动补全

    1.安装bash-completion yum install -y bash-completion 2.重新连接docker 服务器使docker补全命令生效,或者建立新的远程连接docker服务器 ...

  10. 剪裁圆形图片cropie

    <!DOCTYPE html> <html> <head> <script src="https://cdn.bootcss.com/jquery/ ...