题意:给定一个数组你个数的数组a,定义sum(i, j)表示sigma(a[i],...a[j]),以及另外一个函数f(i, j) = (i - j)^2 + sum(i+1, j)^2

求最小的f(i, j)(i < j)

思路:变形一下f(i, j) = (i - j)^2 + (sum[j] - sum[i])^2

那么把i看成x,sum[i]看成y,那就等价于求二维平面的最近点对吗。

二维平面求最近点对有一个经典nlognlogn的分治算法。。

code:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define x first
#define y second
const int Inf = 0x3fffffff;
pair<int, int> p[], tmp[];
int n;
ll dis(int x, int y, int x1, int y1){
ll dx = x - x1, dy = y - y1;
return dx * dx + dy * dy;
} bool cmp(const pii& a, const pii& b){
return a.y < b.y;
} ll X, Y, k;
ll solve(const int l,const int r){
if (l == r) return Inf;
int m = (l + r) >> ;
ll d = solve(l, m), d1 = solve(m+, r);
d = min(d, d1);
k = ;
X = p[m].x;
for (int i = l; i <= r; ++i)
if ((X-p[i].x) * (X-p[i].x) <= d) tmp[k++] = p[i];
sort(tmp, tmp + k, cmp);
for (int i = ; i < k; ++i){
Y = tmp[i].y;
for (int j = i+; j < k; ++j){
if ((Y - tmp[j].y) * (Y - tmp[j].y) > d) break;
d = min(d, dis(tmp[i].x, tmp[i].y, tmp[j].x, tmp[j].y));
}
}
return d;
} void solve(){
p[] = make_pair(, );
int u;
for (int i = ; i <= n; ++i)
scanf("%d", &u), p[i].x = i, p[i].y = p[i-].y + u;
ll ans = solve(, n);
cout << ans << endl;
} int main(){
// freopen("a.in", "r", stdin);
while (scanf("%d", &n) != EOF){
solve();
}
}

codeforces 429D的更多相关文章

  1. ●CodeForces 429D Trick_Function

    题链: http://codeforces.com/problemset/problem/429/D题解: 分治,最近点对 不难发现g(i,j)=sum[j]-sum[i], 那么f(i,j)=(i- ...

  2. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  3. 【codeforces 429D】Tricky Function

    [题目链接]:http://codeforces.com/problemset/problem/429/D [题意] 给你n个数字; 让你求出一段区间[l,r] 使得 (r−l)2+(∑rl+1a[i ...

  4. Codeforces 429D Tricky Function(平面最近点对)

    题目链接  Tricky Function $f(i, j) = (i - j)^{2} + (s[i] - s[j])^{2}$ 把$(i, s[i])$塞到平面直角坐标系里,于是转化成了平面最近点 ...

  5. Codeforces(429D - Tricky Function)近期点对问题

    D. Tricky Function time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. Codeforces 429D Tricky Function 近期点对

    题目链接:点击打开链接 暴力出奇迹. 正解应该是近期点对.以i点为x轴,sum[i](前缀和)为y轴,求随意两点间的距离. 先来个科学的暴力代码: #include<stdio.h> #i ...

  7. Codeforces Round #245 (Div. 1) 429D - Tricky Function 最近点对

    D. Tricky Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/problem/42 ...

  8. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  9. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

随机推荐

  1. 解决GBK字符转UTF-8乱码问题

    通过以下方法将GBK字符转成UTF-8编码格式的byte[]数组 package test; import java.io.UnsupportedEncodingException; public c ...

  2. Activity

    activity的生命周期: 第一个是:点击按钮切换到另一个activity界面. 第二个是:单击物理返回键的时候,是对当前的activity进行销毁动作. Activity的启动方式:直接启动和匿名 ...

  3. mysql存储过程简介

    创建存储过程CREATE PROCEDURE productpricing(OUT pl DECIMAL(8,2),OUT ph DECIMAL(8,2),OUT pa DECIMAL(8,2))BE ...

  4. 基于WDF的PCI/PCIe接口卡Windows驱动程序(1)-WDF概述及开发环境搭建

    原文出处:http://www.cnblogs.com/jacklu/p/4619110.html 本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法 ...

  5. 用BlendFunc实现舞台灯光和刮刮卡效果

    [转]http://code.lovemiao.com/?p=136#more-136 之前写过一篇<不规则形状按钮的点击判定>,利用了CCRenderTexture创建一块画布,可以在上 ...

  6. newCachedThreadPool线程池

    public static ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们.对于执行很多短期异步任 ...

  7. JsonCpp简单使用

    作者:ilife JsonCpp简单使用 1.相关概念总结 (1)解析json的方法 Json::Value json;     //表示一个json格式的对象 Json::Reader reader ...

  8. eclipse javascript验证报错

    项目右键->properties

  9. Oracle环境变量NLS_LANG

    常见的值可以参见Oracle Database Client Globalization Support

  10. 测试table数据 winfrom datagridview 点击标头数字排序的时候table 列类型要为数字类型

    public DataTable GenerateData(int NoOfRecord){DataTable tbl = new DataTable();tbl.Columns.Add(new Da ...