CF1352D的题解

(一)

直接模拟。

\(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;
}
posted @ 2024-03-28 08:21  Jerry_heng  阅读(13)  评论(0)    收藏  举报