YACS-202106
T5 平衡点
分析:
示例代码
#include<bits/stdc++.h> using namespace std; int n; //a 输入数列数 p从第一个到当前元素之和-平衡的前面之和 //s 从某点到最后一个数之和-平衡点后面之和 long long a[100005],p[100005],s[100005],ans,l,r; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",a+i); } //提前计算平衡点的前面元素之和 for(int i=1;i<=n;i++){ p[i]=p[i-1]+a[i]; } //提前计算平衡点的后面元素之和 for(int i=n;i>=1;i--){ s[i]=s[i+1]+a[i]; } //计算第一个为平衡点时,平衡点后面引力 for(int i=2;i<=n;i++){ r=r+(i-1)*a[i]; } ans=r;//第一个为平衡点是引力最大 ans先赋值最大数 for(int i=1;i<n;i++){ l=l+p[i];//计算每个平衡点左边引力-参见示例 r=r-s[i+1];//计算每个平衡点右边引力-参见示例 ans=min(ans,abs(l-r));//本次计算和最大引力差取最小 } printf("%lld",ans); return 0; }
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习