CF823div2B
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的更多相关文章
随机推荐
- startActivity 新开一个Activity
private void startActivity(Intent intent) { Context ctx = ApplicationController.getTopActivity(); if ...
- 修复右键批量打印PDF文件的功能
bat文件内容如下, 直接右键管理员运行即可. @echo off rem "功能描述:修复右键批量打印PDF文件的功能" rem "制作人:赵龙" rem & ...
- guide, manual, tutorial之间的区别
总结:一般而言,guide表示用户指南,提供简要的信息:manual表示用户手册,提供较为完整深入的说明:tutorial表示教程,提供详细的说明,侧重于给没有经验的人一步一步进行详细的指导.实际情况 ...
- jmeter-时间处理
${__time(,)} 1486091280955 //无格式化参数,返回当前毫秒时间,默认13位.一般用来做时间戳 ${__time(/1000,)} //为取10位的时间戳的函数表达式(时间精确 ...
- 超2T硬盘使用gpt分区及做成lvm
1.超过2T分区不能用fdisk了,用parted 分区格式化后对新的分区做lvm
- Java 向上转型
向上转型: 对象的向上转型,其实就是多态写法: 父类名称 对象名 = new 子类名称(); 注意:向上转型一定是安全的,从小范围转向大范围.(从小范围的猫,向上转化为更大范围的动物)
- cuda-gdb
1, cuda-gdb 可执行文件 2. b 打断点 3. 进入核函数 把断点打在核函数中 4. r 5. cuda block 1 thread 1 选取线程
- postgresql 之修改psql log信息级别
1.修改当前使用的postgresql.conf文件vim /var/lib/pgsql/10/data/postgresql.conf 2.vim 下使用\notice 找到待修改项 client_ ...
- TinyMapper使用 对象映射框架
方便的进行对象转换,仅作使用笔记 https://www.cnblogs.com/arvinzhang/p/8282922.html 例子: var result = new List<Equi ...
- 实践:Oracle 数据库基于 RMAN 备份至 腾讯云COS
简介 对象存储(COS)海量容量无上限,自动沉降归档存储类型和深度归档存储类型,媲美磁带的成本,特别适合备份归档场景. 当前,越来越多客户选择备份上云:而 Oracle 备份模块实现了和 腾讯云COS ...