1 条题解

  • 0
    @ 2026-9-30 12:39:37

    C++ :

    
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    /* 圆 i、j 相离 <-> 区间 [P-R, P+R] 互不重叠 <-> 右端点 < 左端点。
       按右端点排序,对每个圆二分数出「右端点 < 自己左端点」的个数。 */
    static long long L[50005], Rr[50005], sr[50005];
    int main(){
        int n;
        if(scanf("%d",&n)!=1) return 0;
        for(int i=0;i<n;i++){
            long long P,Rd;
            scanf("%lld %lld",&P,&Rd);
            L[i]=P-Rd; Rr[i]=P+Rd;
        }
        for(int i=0;i<n;i++) sr[i]=Rr[i];
        sort(sr,sr+n);
        long long ans=0;
        for(int i=0;i<n;i++){
            ans += (long long)(lower_bound(sr,sr+n,L[i]) - sr);
        }
        printf("%lld\n", ans);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2630
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者