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;
}
相关推荐
田梓燊1 天前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎1 天前
算法札记——4.27
算法
数据牧羊人的成长笔记1 天前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理1 天前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
d111111111d1 天前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
Jiangxl~1 天前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢1 天前
wolfram详解山峦算法
前端·算法
counting money1 天前
prim算法最小生成树(java)
算法
澈2071 天前
C++面向对象:类与对象核心解析
c++·算法
用户690673881921 天前
基于无人机的单目测距系统,平均误差仅2.12%
算法