codeforces 429D
题意:给定一个数组你个数的数组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的更多相关文章
- ●CodeForces 429D Trick_Function
题链: http://codeforces.com/problemset/problem/429/D题解: 分治,最近点对 不难发现g(i,j)=sum[j]-sum[i], 那么f(i,j)=(i- ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【codeforces 429D】Tricky Function
[题目链接]:http://codeforces.com/problemset/problem/429/D [题意] 给你n个数字; 让你求出一段区间[l,r] 使得 (r−l)2+(∑rl+1a[i ...
- Codeforces 429D Tricky Function(平面最近点对)
题目链接 Tricky Function $f(i, j) = (i - j)^{2} + (s[i] - s[j])^{2}$ 把$(i, s[i])$塞到平面直角坐标系里,于是转化成了平面最近点 ...
- Codeforces(429D - Tricky Function)近期点对问题
D. Tricky Function time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces 429D Tricky Function 近期点对
题目链接:点击打开链接 暴力出奇迹. 正解应该是近期点对.以i点为x轴,sum[i](前缀和)为y轴,求随意两点间的距离. 先来个科学的暴力代码: #include<stdio.h> #i ...
- Codeforces Round #245 (Div. 1) 429D - Tricky Function 最近点对
D. Tricky Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/problem/42 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
随机推荐
- 正则验证:Pattern,Matcher
public static void main(String[] args) { String regex="([a-z]{1})(\\d{2})"; String candida ...
- Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
本节内容: 进程与线程区别 线程 a) 语法 b) join c) 线程锁之Lock\Rlock\信号量 d) 将线程变为守护进程 e) Event事件 f) queue队列 g) 生 ...
- 解析工具Goson
/** * 解析申请分配座位席别 * @param json * @return */ public static TrainOrderResponse getTrainOrder(String js ...
- css属性word-spacing和letter-spacing的区别
word-spacing和letter-spacing用来定义单词或者字母之间的水平空白间隔.顾名思义,word-spacing定义了单词之间的空白,例如: <div style="w ...
- Get the Uniqueid of Action Originate in the AMI
[asterisk-users] Get the Uniqueid of Action Originate in the AMI Adolphe Cher-Aime acheraime at gmai ...
- poj 2536 Gopher II (二分匹配)
Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6345 Accepted: 2599 Descrip ...
- CSS3--背景颜色的渐变效果
一.渐变:gradients 线性渐变(linear gradients) background:-webkit-linear-gradient(90deg,red 10%,blue); 1.需要有内 ...
- 02-JAVA中的基本语法
第一个动手动脑: 首先用枚举类型定义两个变量,然后判断两个变量是否引用同一对象,在判断枚举类型是否是原始数据类型,再从字符串中转换,最后列出所有的对象. 很明显,这两个变量都是枚举类型,但是这两个变量 ...
- Java中XML格式的字符串4读取方式的简单比较
Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...
- IT公司笔试题(一)
1. 已知一个递归算法的算法复杂度计算公式为T(n) = T(n/2) + n,则T(n)的算法复杂度为多少? 解:O(n) T(n) = T(n/2) + n = T(n/4) + n/2 + n ...