Coloreado Épico#11836

Coloreado Épico (Editorial)

Autor del Problema:

Hasan Saleh (MathModel)

Preparado por:

Hasan Saleh (MathModel)

Editado por:

Hasan Saleh (MathModel)

Solución 1

Observe que solo hay dos casos de paridad de la suma del arreglo, consideremos cuando es impar, consideremos todas las elecciones posibles para la suma de pares:

  • y por lo tanto el complementario es .

  • y por lo tanto el complementario es .

  • y por lo tanto el complementario es

Observe que en todas las configuraciones ninguna de ellas coincide con la paridad, por lo tanto la respuesta es cuando (\sum a \bmod 2=1).

Ahora consideremos cuando es par, tenemos todas las configuraciones posibles:

  • y por lo tanto el complementario es .

  • y por lo tanto el complementario es .

  • y por lo tanto el complementario es

Observe que todas las configuraciones coinciden, por lo tanto consideramos todas las combinaciones que son

\sum_{i=1}^{n-1} i = 1+2+3+...+(n-1)=\frac{n(n-1)}{2}

Complejidad .

#include<bits/stdc++.h>
using namespace std;
#define ll long long
void solve(){
    int n;cin>>n;
    vector<int>a(n);
    ll sum=0;
    for(auto &i:a){
        cin>>i;
        sum+=i;
    }
    if(sum&1){
        cout<<"0\n";
    }else{
        cout<<(ll)(n*(n-1))/2<<"\n";
    }
}
int main(){
    int t;cin>>t;
    while(t--){
        solve(); 
    }
    return 0;
}

Solución 2

Podemos emparejar secuencialmente cada paridad con su correspondiente y acumular el conteo cada vez, cada vez emparejaremos pares con impares y acumularemos el conteo simplemente. Solo esto funciona cuando es par, de lo contrario es 0.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
void solve(){
    int n;cin>>n;
    vector<int>a(n);
    int o=0;int e=0;
    ll sum=0;
    ll ans=0;
    for(auto i:a){
        cin>>i;
        sum+=i;
    }
    if(sum&1){
        cout<<"0\n";
        return;
    }else{
        for(auto i:a){
            ans+=e+o;
            if(i&1){
                e++;
            }else{
                o++;
            }
        }
    }
    cout<<ans<<"\n";
}
int main(){
    int t;cin>>t;
    while(t--){
        solve(); 
    }
    return 0;
}

Complejidad .