-
一道比较正宗的双指针题目
-
两个人各取一边,往中间走,其实没啥好说的,思路很简单,不过细节很多,需要注意。
-
需要5个变量,一个是最后总共有多少次move,一个是保存Alice吃了多少,一个是保存了Bob吃了多少。还有两个属于临时变量,一个保存Alice这一次吃了多少,一个保存Bob这次吃了多少,这两个变量用于比较。
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N];
bool vis[N];
void solve(){
memset(vis, 0, sizeof vis);
int n;
cin >> n;
for(int i = 1; i <= n; i ++) cin >> a[i];
int ansa = a[1], ansb = 0, cnt = 0, i = 1, j = n + 1;
int ta = a[1], tb = 0;
bool flag = true;
vis[1] = true;
if(n == 1){
cout << 1 << ' ' << a[1] << ' ' << 0 << endl;
return;
}
ta = a[1];
while(i < j){
if(i + 1 == j){
cout << cnt << ' ' << ansa << ' ' << ansb << endl;
return;
}
while(ta <= tb){
i ++;
if(vis[i]){
cout << cnt + 1 << ' ' << ansa << ' ' << ansb << endl;
return;
}
ta += a[i];
ansa += a[i];
vis[i] = true;
}
cnt ++;
tb = 0;
if(j - 1 == i){
cout << cnt << ' ' << ansa << ' ' << ansb << endl;
return;
}
while(tb <= ta){
j --;
if(vis[j]){
cout << cnt + 1 << ' ' << ansa << ' ' << ansb << endl;
return;
}
tb += a[j];
ansb += a[j];
vis[j] = true;
}
cnt ++;
ta = 0;
}
}
int main(){
int t;
cin >> t;
while(t --){
solve();
}
return 0;
}