链接:https://www.nowcoder.net/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
输出描述:
输出一行一个数表示答案
示例1
输入
4 1 0 0 -1
输出
1
备注:
对于100%的数据,2 <= n <= 100000 , |ai| <= 10000
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <string> #include <cstdlib> #define LL long long using namespace std; using namespace std; const int N=100005; int num[N]; long long int sum[N]; long long int res; int main() { int n; while(cin>>n) { sum[0]=0; for(int i=1;i<=n;i++) { cin>>num[i]; sum[i]=sum[i-1]+num[i]; } res=2*0x3f3f3f3f; for(int i=1;i<=n;i++) { for(int j=i+1;j<=i+1100&&j<=n;j++) { long long int ans=(i-j)*(i-j)+(sum[j]-sum[i])*(sum[j]-sum[i]); res=min(ans,res); } } cout<<res<<endl; } return 0; }
未来的我一定会感谢正在努力的现在的我!