(一)
直接模擬。
用 \(l\) 和 \(r\) 記錄當前左端點和右端點編號。
用 \(step\) 記錄步數。
用 \(slnow\) 和 \(srnow\) 記錄有超過的數以及當前累加和。
用 \(sl\) 和 \(sr\) 記錄從左到右和從右到左的和。
(二)
AC 程式碼。
#include<bits/stdc++.h>
using namespace std;
int t,n,a[1001];
int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
int l=2,r=n,slnow=a[1],srnow=0,sl=a[1],sr=0,step=1;
bool flag=1;
while(l<=r){
step++;
if(flag){
while(l<=r&&srnow<=slnow){
srnow+=a[r];
sr+=a[r];
r--;
}
flag=0,slnow=0;
}
else{
while(l<=r&&slnow<=srnow){
slnow+=a[l];
sl+=a[l];
l++;
}
flag=1,srnow=0;
}
}
cout<<step<<" "<<sl<<" "<<sr<<endl;
}
return 0;
}