首页 > 其他分享 >CF1730B Meeting on the Line

CF1730B Meeting on the Line

时间:2022-09-28 14:25:12浏览次数:76  
标签:二分 int double section EPS Line include Meeting CF1730B

题目链接

https://codeforces.com/contest/1730/problem/B

题意简述

\(x\) 轴上有 \(n\) 个人,他们的位置分别是 \(x_i\) ,现在他们想要聚会,需要找一个位置(可以为小数),使得他们走到一起的总时间最短 , 每个人在出发前需要 \(t_i\) 的时间穿好衣服 , 然后才能出发.他们走到 \(x_0\) 所需要的时间就是 \(t_i+\)\(|x_i-x_0|\),请你帮助他们找到在哪个位置相遇能使得总时间最短.

样例

点击查看样例

分析

比赛时完全没有头绪.补题之前复盘了一下这题突然想到可以二分做,但是具体想不出来怎么实现,遂看题解.
这道题要么以时间二分,要么以位置二分,简单推理可以发现位置没有二分性.
以时间二分.就看所用当前这个时间能否让所有人都达到某一点.
如果当前要求时间为 \(T\) ,那么在 \(x_i\) 的点所能走到的位置就是 \([\ a[i]-(T-t[i])\ ,\ a[i]+(T-t[i])\ ]\).
对于所有人所能走到的位置取交集即可,如果交集为空( \(r-l\) 小于\(0\))

题外话就是EPS取到\(1e^{-8}\)时 $ TLE$ 了,EPS取到 \(1e^{-7}\) \(AC\)

代码

点击查看代码
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=1e5+10;
const double EPS =1e-7;
int a[N];
int t[N];
int n;
struct section
{
	double l,r;
};
section merge(section a,section b)//merge:合并
{
	return {max(a.l,b.l),min(a.r,b.r)};
}
double res;
double temp_l;
int print=0;

int check(double  T)
{
	section all={INT32_MIN,INT32_MAX};
	for(int i=1;i<=n;i++)
	{
		double rest_t=T-t[i];
		if(rest_t<0)return false;
		section p={a[i]-rest_t,a[i]+rest_t};
		all=merge(all,p);
	}
	double l=all.l,r=all.r;
	if(r-l>=EPS)
	{
		temp_l=l;
		if(print)
		printf("可行区间%lf %lf\n",l,r);
	}
	return r-l>=EPS;
}
int main()
{
	//freopen("uva.txt","r",stdin);
	
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		double l=INT32_MAX,r=0x3f3f3f3f;
		
		for(int j=1;j<=n;j++)
		{
			scanf("%d",&t[j]);
			l=min(l,(double)t[j]);
		}
		
		
		while(r-l>EPS)
		{
			double mid=(l+r)/2;
			if(print)
			cout<<l<<" "<<r<<" "<<mid<<endl;
			if(check(mid))
			{
				r=mid;
				res=temp_l;
			}else l=mid;
		}
		printf("%lf\n",res);	
	}
	return 0;
}

标签:二分,int,double,section,EPS,Line,include,Meeting,CF1730B
From: https://www.cnblogs.com/oijueshi/p/cf1730b.html

相关文章

  • QT中lineEdit和textEdit通过enter按键发送数据的操作方法
    在调节电机PID参数过程中需要通过enter按键发送lineEdit和textEdit中的内容。这里介绍一种如何通过enter按键发送lineEdit和textEdit的数据,同样也可以通过按键发送。lineE......
  • xcode command line 安装
    https://developer.apple.com/download/all/?q=Command%20Line%20Tools打开上面的地址,查询一下自己xcode所在版本,下载,然后手工安装就可以了。   如果用命令行处理......
  • Meeting on the Line(贪心,二分,三分)
    MeetingontheLine(贪心算法)(二分,三分)题目大意:类似(实数版)货仓选址,给你n个位置(不用再这n个位置中选,可以任意选实数),再给你这n个位置出发的准备时间(可以转化成距离来看),求一......
  • C# Console.WriteLine()不在输出窗口显示内容
    以前调试代码的时候,用Console.Writeline(“xxxxx”)可以直接在VS的“输出”窗口显示要打印的东西,今天用VS2019跑代码的时候突然发现没有输出内容了,搞得我一脸懵逼。查了相......
  • ABC 244 C - Yamanote Line Game (交互题)
    https://atcoder.jp/contests/abc244/tasks/abc244_c题目大意:有两个人,分别叫做AB。给定一个数字,A先手,每个人可以从[1,2*n+1]这个范围内说出一个数字,说不出的人就输;我......
  • Pipeline 责任链
    publicclassMain{publicstaticvoidmain(String[]args){Pipelinep=newPipeline();p.addLast(newHandler1());p.addLast(new......
  • [luogu p8251] [NOI Online 2022 提高组] 丹钓战
    [P8251NOIOnline2022提高组]丹钓战-洛谷|计算机科学教育新生态(luogu.com.cn)容易发现对于一次查询\([L,R]\),\(L\)一定是第一个入栈的,也是成功的,答案至少为......
  • Hive beeline方式连接Could not open connection to the HS2 server(补充)
    想启动beeline客户端却发现连不上beeline-ujdbc:hive2://hadoop102:10000-natguigu参考了https://blog.csdn.net/aubekpan/article/details/93758340的博客发现了问......
  • The 2022 ICPC Asia Regionals Online Contest (II) B
    BNon-decreasingArray我们可以知道两个操作都是一样的那我们直接记dp[i][j]为前i个数选了j个数并且以ai为结尾的max状态转移直接枚举dp[k][j-1]+(a[i]-a[k])^2即可......
  • 关于使用conda create -n offline_per python=3.7时报错的问题
    为使用多个服务器节点进行训练offline_per,因为需要安装Atari,Mujoco,d4rl以及dm-control等,准备在多个节点上安装cond环境。但遇到一些问题:  经过研究,发现可能是默认......