牛客网——E求最值
2024-08-30 06:31:00
链接:https://www.nowcoder.com/acm/contest/59/E
来源:牛客网
题目描述
给你一个长为n的序列a
定义f(i,j)=(i-j)2+g(i,j)2
g是这样的一个函数
求最小的f(i,j)的值,i!=j
输入描述:
第一行一个数n
之后一行n个数表示序列a
输出描述:
输出一行一个数表示答案
输入例子:
4
1 0 0 -1
输出例子:
1
-->
示例1
输入
4
1 0 0 -1
输出
1
备注:
对于100%的数据,2 <= n <= 100000 , |ai| <= 10000
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
using ll = long long;
const int qq = ;
ll a[qq]; inline ll sqr(ll x){ return x*x;} int main()
{
int n;
cin >> n;
for(int i=;i <= n;i++)
{
scanf("%lld",a + i);
a[i] += a[i-];
} ll minans = INF;
for(int i=;i <= n;i++)
{
int k=;
for(int j=i-;j >= &&k<=;j--,k++)
{
ll ans = sqr(i-j) + sqr(a[i]-a[j]);
if(ans < minans)
minans = ans;
}
}
cout << minans << endl;
return ;
}
1.第一处是计算从L到R区间的和用 (a[R] - a[L]) 其中 a[ i ] 是从开头加到第 i 个位置,在多组数据的时候可以避免重复计算。
2.第二个就是因为求得是最小值所以 (i - j)一定不会很大
3.牛客网可以看别人代码,蛮好的,要多学习一点大神们的代码方式。
最新文章
- LeetCode 88 Merge Sorted Array
- 利用jQuery内置的data()方法存储数据
- 62.Android之各分辨率定义的图片规格
- Document types require more than xhtml1.0
- JS constructor
- C# 文件压缩与解压(ZIP格式)
- 好!recover-binary-search-tree(难)&; 两种好的空间O(n)解法 &; 空间O(1)解法
- js 获取 当前时间 时间差 时间戳 倒计时
- Chromium Graphics: GPUclient的原理和实现分析之间的同步机制-Part II
- 建立Cent OS7server有些问题需要注意
- Laravel框架开发规范-修订前期版
- Local declaration of &#39;XXX&#39; hides instance variable
- Element is not clickable at point error in chrome
- js常见排序
- Linux 环境 Intelij Idea 安装与快捷图标配置
- 吴恩达机器学习笔记41-支持向量机的优化目标(Optimization Objective of Support Vector Machines)
- Oracle Instance and Database
- thinkphp如何利用反射实现钩子方法
- jquery.pagination.js添加跳转页
- Inno Setup脚本