首页 > 其他分享 >CF429D Tricky Function 题解 分治/平面最近点对

CF429D Tricky Function 题解 分治/平面最近点对

时间:2023-03-28 23:02:01浏览次数:58  
标签:Tricky Function return int 题解 long Node maxn 平面

题目链接:http://codeforces.com/problemset/problem/429/D

题目大意:

给定一个长度为 \(n\) 的数列 \(a_1, a_2, \ldots, a_n\)。

用 \(s\) 表示 \(a\) 的前缀和数组,即 \(s_i = \sum\limits_{j = 1}^i a_j\)

定义 \(f(i, j) = (i - j)^2 + (s_i - s_j)^2\)

求所有 \(i \neq j\) 的 \(f(i, j)\) 的最小值。

解题思路:

平面最近点对

将 \(i\) 作为横坐标,\(s_i\) 作为纵坐标,\((i - j)^2 + (s_i - s_j)^2\) 作为两点之间距离。求平面最近点对。

示例程序(在平面最近点对代码上稍作了一点修改):

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;

struct Node {
    long long x, y;
} a[maxn], b[maxn];

bool cmp_x(Node a, Node b) {
    return a.x < b.x;
}

bool cmp_y(Node a, Node b) {
    return a.y < b.y;
}

long long dis(Node a, Node b) {
    return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}

int n;
long long A[maxn];

long long solve(int l, int r) {
    if (l >= r) return 2e9;
    int mid = (l + r) / 2;
    long long d = min(solve(l, mid), solve(mid+1, r));
    int p = 0;
    for (int i = l; i <= r; i++) if ((a[i].x - a[mid].x) * (a[i].x - a[mid].x) < d) b[p++] = a[i];
    sort(b, b+p, cmp_y);
    for (int i = 0; i < p; i++)
        for (int j = i+1; j < p && (b[j].y - b[i].y) * (b[j].y - b[i].y) < d; j++)
            d = min(d, dis(b[i], b[j]));
    return d;
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%lld", A+i);
        A[i] += A[i-1];
        a[i].x = i;
        a[i].y = A[i];
    }
    sort(a+1, a+n+1, cmp_x);
    printf("%lld\n", solve(1, n));
    return 0;
}

标签:Tricky,Function,return,int,题解,long,Node,maxn,平面
From: https://www.cnblogs.com/quanjun/p/17267085.html

相关文章

  • buu [CISCN] BadProgrammer题解
    [CISCN]BadProgrammer页面很长,有很多的按钮,但是点了之后都没反应查看源码、扫描打开到具体目录一个个目录点开看,在static/下找到了一个flag.ejs文件下载,打开......
  • [ARC131D] AtArcher 题解
    题意数轴上有一个箭靶以\(0\)为轴心左右对称,给定每个得分区域的范围和分值,要求射\(N\)支箭在靶上,且任意两支箭的距离不少于\(D\),求最大得分。保证从中心向两侧分数不......
  • android:state_pressed标签失效或android:state_enabled标签失效问题解决
    问题描述:android:state_pressed标签失效或android:state_enabled标签失效,点击不会变色,可用/不可用时不会变色。 <?xmlversion="1.0"encoding="utf-8"?><selector......
  • 省选武汉联测 13 题解
    省选模拟赛俩构造一交互挺nm逆天。赛后题解区就一句Surprise!!!没题解也挺nm逆天。那建议组题人的马先消失一下。这时候就体现学长博客的重要性了。搜关键词搜到三......
  • 第六篇 引用类型 - 函数 - Function
    函数—javascript的第一等公民函数的多变来源于参数的灵活多变和返回值的多变普通函数—如果参数是一般的数据类型或一般对象,这样的函数就是通函数高级函数—如......
  • Conda in Windows under MSYS2 and Zsh 的问题解决
    CondainWindowsunderMSYS2andZsh的问题解决在Window11上使用gitbash安装zsh,并配置p10k主题,主要问题就是prompt中无法显示condaenv;condaactivate/deactivate......
  • 【题解】[SDOI/SXOI2022] 小 N 的独立集(dp of dp)
    题目分析:就借助这个题稍微说一下\(dp\)套\(dp\)。对于\(dp\)套\(dp\)其解决的问题是:若给定某一具体情况则答案十分好求,现要求对于所有的情况的答案进行统计。这......
  • 【题解】[HNOI2007]梦幻岛宝珠
    题目分析:对于这种某一个值很大另一个值很小的背包题,就是要求找特殊性质。既然每一个\(w\)都可以写成\(a\times2^b\)的性质,就可以对于每一个\(b\)单独做背包,这样......
  • 【题解】[APIO2010] 信号覆盖
    题目分析:其实就是涉及四个点之间的位置关系,三个点形成圆判断是否包含另一个点。考虑四个点之间形成的多边形只可能是凸四边形或者是凹四边形,如下图所示:(上图为凸多边形)......
  • 【题解】Atcoder ABC295 A-G
    A.ProbablyEnglish题目分析:直接每一个单词判一下就好了。代码:点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn;scanf("%d",&n); bo......