这是蓝桥杯中的一题
整数数列和
我一开始是用暴力,是能得50分。
后来,我想了一下用前缀和来做,然后求他们之间的最小差值。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n ,a[1000000];
int x[10000],y[10000];
ll d[100000] ;
int main(){
cin>>n;
//8
for(int i=1;i<=n;i++){
cin>>a[i];
}
//2 2 3 3 5 6 1
for(int i=1;i<=n;i++){
x[i]=a[i];
y[i]=a[i];
}
for(int i=1;i<=n;i++){
x[i]+=x[i-1];
y[n-i]+=y[n-i+1];//使用前缀和将他们从后向前,从前向后逐渐累加
}
//2 4 7 10 15 21 22 x
//22 20 18 15 12 7 1 y
int mini=111000000;
for(int i=1;i<n;i++){
mini=min(mini,abs(x[i]-y[i+1]));//计算他们的最小差值
}
cout<<mini;
return 0;
}
//8
//2 2 3 3 5 6 1
//2 4 7 10 15 21 22
//22 20 18 15 12 7 1
//22 18 14 8 2 8 20