C. Training Before the Olympiad

发布时间 2023-12-31 13:54:15作者: 纯粹的

原题链接

题解

事实1.两个数合并后的数一定是偶数
事实2.如果没有发生奇数和偶数合并,那么最终的结果一定是所有数的和
事实3.每发生一次奇数和偶数合并,最后的结果会减一

总结

综上所述,Masha会尽量选择同奇或同偶合并,但在有同奇的情况下,会优先选择同奇,因为合并会产生偶数,且Olya需要用到奇数与偶数合并

代码

#include<bits/stdc++.h>
using namespace std;
long long sum[100005]={0},a[100005]={0};
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];}
        cout<<a[1];
        long long js=a[1]%2;
        for(int i=2;i<=n;i++)
        {
            js+=a[i]%2;
            cout<<" ";
            if(js%3%2)cout<<sum[i]-js/3-1;
            else cout<<sum[i]-js/3;
        }
        puts("");
    }
    return 0;
}