解析:
可以发现,只有两个数为偶数和奇数时,会减少1,否则不会改变总和,所以奇数数量会影响最终结果,需要统计奇数数量cnt。
先手者想要最大化总和,所以他会尽量选择两个奇数从而消耗奇数数量,而后手者会尽量选择一奇一偶来减少总和。
所以每三个奇数会减少1(先手消耗两个奇数,后手消耗一个奇数),则对其除3即可
注意,最后如果只剩余1个奇数,即先手者选不了两个奇数,则还会多减少1,需特判
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,a[N];
void solve(){
scanf("%lld",&n);
int cnt=0,sum=0,ans;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
sum+=a[i];
if(a[i]%2==1) cnt++; //统计奇数
if(i==1) printf("%lld",sum);
else{
ans=cnt/3;
if(cnt%3==1) ans++; //剩余为 1,则会再减少1
printf(" %lld",sum-ans);
}
}
puts("");
}
signed main(){
int t=1;
scanf("%lld",&t);
while(t--) solve();
return 0;
}