Problem - 2180D - Codeforces

Problem - 2180D - Codeforces

题意很简单 要求圆的面积没有交点 然后求尽可能大的相切点的个数

首先每个点的半径的上界就是他到相邻两个节点的距离的最小值

对于一段合法的圆 我们可以求一下第一个圆的半径的范围 然后就可以根据圆之间的距离求出下一个圆的半径的范围 如果最大半径大于最小半径 就是合法反之就是不合法 那么就直接分隔开 ans--

然后再分割点重复操作即可:

代码如下:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N=2e6+5,INF=1e18;
int a[N];
void solve(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    if(n==1){
        cout<<0<<'\n';return ;
    }
    vector<int>x(n+1,INF);
    for(int i=2;i<=n;i++){
        int d=a[i]-a[i-1];
        x[i]=min(x[i],d);
        x[i-1]=min(x[i-1],d);
    }
    int l=0,r=x[1];
    int ans=n-1;
    for(int i=2;i<=n;i++){
        int d=a[i]-a[i-1];
        int l1=l,r1=r;
        l1=max(d-r,0LL);
        r1=min(d-l,x[i]);
        l=l1,r=r1;
        if(l>=r){
            ans--;
            l=0;r=x[i];
        }
    }
    cout<<ans<<'\n';

}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin>>t;
    while(t--)solve();    
    return 0;
}
相关推荐
gaosushexiangji14 小时前
DIC系统推荐:基于千眼狼三维数字图像相关的无人机旋翼疲劳试验全场应变与位移测量
人工智能·算法
小王C语言16 小时前
【线程概念与控制】:线程封装
jvm·c++·算法
kyle~16 小时前
工程数学---点云配准卡布施(Kabsch)算法(求解最优旋转矩阵)
线性代数·算法·矩阵
张二娃同学17 小时前
03_变量常量与输入输出_printf与scanf详解
算法
江南十四行17 小时前
并发编程(一)
java·jvm·算法
z2005093017 小时前
今日算法(依旧二叉树)
算法·leetcode·职场和发展
Zxc_18 小时前
《遗传算法:从自然选择到Rastrigin函数优化,手写一个完整的进化求解器》
算法
阿Y加油吧18 小时前
两道经典动态规划题:乘积最大子数组 & 分割等和子集 复盘笔记
笔记·算法·动态规划
三品吉他手会点灯18 小时前
C语言学习笔记 - 33.数据类型 - printf函数的详细用法
c语言·开发语言·笔记·学习·算法
NashSKY19 小时前
PnP 问题:数学描述与 DLT 算法推导
算法·矩阵分解·多视图几何·射影几何