CF1352D的題解

Jerry_heng發表於2024-03-28

(一)

直接模擬。

\(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;
}