首页 > 其他分享 >基站建设 题解

基站建设 题解

时间:2023-07-19 23:24:05浏览次数:36  
标签:frac 个点 int 题解 sqrt 建设 基站 include 连接

基站建设

题目大意

在平面上存在 \(n\) 个点,第 \(i\) 个点的坐标为 \((x_i,0)\),具有一个发射半径 \(r_i\) 和一个费用 \(v_i\)。

连接具有方向性,当且仅当 \(j<i\) 且点 \(i\) 的接收范围与点 \(j\) 的发射范围相切时点 \(i\) 才能连接到点 \(j\)。

第 \(i\) 个点的发射范围是指一个圆心在 \((x_i,r_i)\),半径为 \(r_i\) 的圆,接收范围是指一个圆心在 \((x_i,r_i')\),半径为 \(r_i'\) 的圆,其中 \(r_i'\) 可以被指定。

点 \(i\) 连接到点 \(j\) 的代价被定义为 \(\sqrt{r_i'}+v_i\),连接具有按方向的传递性,也就是说,若 \(a\) 连接到 \(b\),\(b\) 连接到 \(c\),那么 \(a\) 也连接到 \(c\)。

平面上还存在一个特殊点 \(u\),点 \(u\) 连接到点 \(j\) 的条件是 \(x_j+r_j\ge m\),且没有代价。求将点 \(u\) 连接到点 \(1\) 的最小代价。

思路分析

斜率优化 DP 好题。

设 \(f_i\) 表示考虑到第 \(i\) 个点,第 \(i\) 个点强制连接到某个点的最小代价。

考虑初值,有 \(f_1=v_1\)。考虑终值,所求即 \(\min\limits_{x_i+r_i\ge m} f_i\)。

枚举第 \(i\) 个点连接到的点 \(j\),容易得状态转移方程为:

\[f_i=\min_{j<i}(f_j+w(i,j)) \]

其中,\(w(i,j)\) 表示将点 \(i\) 和点 \(j\) 连接的代价,即 \(r_i'+v_i\)。

\(r_i'\) 可以直接计算出来,根据勾股定理,有 \((r_i'-r_j)^2+(x_i-x_j)^2=(r_i'+r_j)^2\),容易解得 \(r_i'=\frac{(x_i-x_j)^2}{4r_j}\)。

故 \(w(i,j)=\frac{x_i-x_j}{2\sqrt{r_j}}+v_i\)。

代入原方程,则:

\[f_i=\min_{j<i}(f_j+\frac{x_i-x_j}{2\sqrt{r_j}}+v_i) \]

然后是常规斜率优化化简:

\[\begin{aligned}f_i&=f_j+\frac{x_i}{2\sqrt{r_j}}-\frac{x_j}{2\sqrt{r_j}}+v_i\\(f_i-v_i)&=(\frac{1}{2\sqrt{r_j}})(x_i)+(f_j+\frac{x_j}{2\sqrt{r_j}})\end{aligned} \]

设:

\[\begin{cases}y=f_i-v_i\\k=\frac{1}{2\sqrt{r_i}}\\x=x_i\\b=f_j+\frac{x_j}{2\sqrt{r_j}}\end{cases} \]

问题转化为每次插入一条 \(k_i=\frac{1}{2\sqrt{r_i}},b_i=f_i+\frac{x_i}{2\sqrt{r_i}}\) 的直线,查询 \(x=x_i\) 处的最小值,用李超线段树优化即可。

考虑到 \(x_i\) 的值域较大,可以对其离散化。

代码

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>

using namespace std;
#define int long long
const int N=500500;
#define inf 1e18
#define mid ((l+r)>>1)

int n,m;
int x[N],bx[N],r[N],v[N];

double f[N],ans=inf;

struct Line{
    double k,b;
}line[N];

double calc(int id,int pos){//计算第 id 条直线在离散化后的 pos 处的值
    return line[id].k*bx[pos]+line[id].b;
}

bool Less(int id1,int id2,int pos){//比较两条直线的优劣
    return calc(id1,pos)<calc(id2,pos);
}

struct ST{//简洁的李超线段树
    int a[N<<2];
    void add(int p,int l,int r,int id){
        if(l==r){if(Less(id,a[p],l)) a[p]=id;return ;}
        if(Less(id,a[p],mid)) swap(a[p],id);
        if(Less(id,a[p],l)) add(p<<1,l,mid,id);
        if(Less(id,a[p],r)) add(p<<1|1,mid+1,r,id);
    }
    double query(int p,int l,int r,int pos){
        double res=calc(a[p],pos);
        if(l==r) return res;
        if(pos<=mid) res=min(res,query(p<<1,l,mid,pos));
        else res=min(res,query(p<<1|1,mid+1,r,pos));
        return res;
    }
}tree;

signed main(){
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld%lld",&x[i],&r[i],&v[i]);
        bx[i]=x[i];
    }
    int tot=unique(bx+1,bx+n+1)-bx-1;
    for(int i=1;i<=n;i++)
        x[i]=lower_bound(bx+1,bx+tot+1,x[i])-bx;//常规离散化
    line[0]={0,inf};//将第 0 条线的值赋为无穷,可以省去特判空直线的情况
    f[1]=v[1];//初始化
    line[1]=Line{1/(2*sqrt(r[1])),f[1]-bx[x[1]]/(2*sqrt(r[1]))};
    tree.add(1,1,n,1);//插入第一条直线
    for(int i=2;i<=n;i++){
        f[i]=tree.query(1,1,n,x[i])+v[i];
        line[i]=Line{1/(2*sqrt(r[i])),f[i]-bx[x[i]]/(2*sqrt(r[i]))};
        tree.add(1,1,n,i);//插入直线
    }
    for(int i=1;i<=n;i++)
        if(bx[x[i]]+r[i]>=m) ans=min(ans,f[i]);//对所有满足条件的点取最小值
    printf("%.3lf\n",ans);
    return 0;
}

标签:frac,个点,int,题解,sqrt,建设,基站,include,连接
From: https://www.cnblogs.com/TKXZ133/p/17567066.html

相关文章

  • 人才信息枢纽平台建设方案
    人才信息枢纽平台的建设方案可以包括以下几个关键步骤:需求分析:明确平台的目标和功能,了解用户需求,确定平台的定位和服务范围。技术选型:选择合适的技术栈和开发框架,确保平台具备良好的性能、安全性和可扩展性。数据整合:整合各类人才信息数据源,包括招聘信息、简历信息、企业信息等,建立......
  • [ARC104E] Random LIS 题解
    [ARC104E]RandomLIS题解Link吐了,一下午就写了这一个题……主要是题解都说的很草率。然后上课的时候貌似讲的方法不是很能做(也许是我太菜了),总之我得写篇题解整理整理。首先\(n\)很小,可以直接爆搜所有相对大小,即我们去搜索\(1\)到\(n\)的排名,排名可以一样(即\(a_i\)相......
  • RTSP流媒体服务器LntonNVR(源码版)云服务平台下载录像后无法拖动时间轴的问题解决方案
    LntonNVR安防视频云服务平台是基于RTSP/Onvif协议的视频接入、处理及分发平台,可以分发出RTSP、RTMP、WS-FLV、HTTP-FLV、HLS、WebRTC等格式的视频流,可实现在全终端(PC、手机、平板、电子大屏/电视墙等)播放监控视频。有用户反馈,在使用LntonNVR下载录像时,下载后的录像时间无法拖动时间......
  • 【小学期实训】附加题题解——Good Karma
    [状压dp+容斥原理]实训附加题——GoodKarma目录[状压dp+容斥原理]实训附加题——GoodKarma题目描述题目输入格式输出格式数据范围样例输入1样例输出1样例输入2样例输出2样例解释2Solution题目描述题目链接题目「天空度假山庄」中有一个\(n\)点\(m\)边的无向图,图中点......
  • 【小学期实训】附加题题解——最高段位
    [dp状态设计]实训附加题——最高段位目录[dp状态设计]实训附加题——最高段位题目描述背景题目输入格式输出格式数据范围样例输入1样例输出1样例输入2样例输出2样例解释2样例输入3样例输出3Solution题目描述题目链接背景香风智乃除了喜欢玩瓶中船之外,还喜欢打竞技游戏。有......
  • CF786E ALT 题解
    为什么你们第一眼都能想到最小割,我第一眼都只能想到费用流。为什么你们的做法都这么短,我一写就是\(5KB\)。费用流有一个基本矛盾,就是守卫只需拥有一只狗和每一个人都需要守卫有狗的基本矛盾。由于需求与供给不平衡,所以流量不好确定。如果有人费用流过了来长沙火车站,疯狂星期四......
  • [SDOI2010] 代码拍卖会 题解
    [SDOI2010]代码拍卖会题解题目描述一个\(n,n\le10^{18}\)位数,仅由\(1\sim9\)组成,后一位数字一定大于等于前一位数字。求这些数中可以被\(m,m\le500\)整除的有多少,对\(999911659\)取模。解析这个数一定形如\(112334455677788999\)可以把它拆成\[\begin{aligned}......
  • 黑群晖NAS7.0+安装问题解决经验分享
    感谢网上各种帖子及分享,为大家提供一个解决思路,机器配置多种多样,解决办法也仅供参考;1、引导后,无法找到群晖  遇到无法找到群晖的情况,首先要排除引导不兼容的问题。在bios中分别设置传统引导模式和UEFI引导模式尝试启动试下。最新版7.0.1的引导文件是两种启动方式都支持的,理......
  • 题解 [USACO18JAN] MooTube G
    题目链接可以发现,对于一个固定的\(k\),所有边权小于\(k\)的边对答案是没有贡献的,因为一条边的相关性是最小相关性,这也意味着我们不能从\(<k\)的边到达其他的点。由于本题有多组询问,所以对于没有用的边,将其看做被删除,有用的边,将其看做被插入。考虑到本题实际上要维护连通块......
  • 数据中心机房建设,务必确定这13个关键点
    下午好,我的网工朋友。关于机房、机架的相关内容,给你们说了不少。今天再给你补充个知识点,机房建设,要怎么做。熟悉机房建设的网工朋友可能都知道,一个全面的数据中心机房建设工程一般包括:综合布线、抗静电地板铺设、棚顶墙体装修、隔断装修、UPS、专用恒温恒湿空调、机房环境监控系统......