Coloration Épique#11836

Coloration Épique (Corrigé)

Auteur du problème:

Hasan Saleh (MathModel)

Préparé par:

Hasan Saleh (MathModel)

Édité par:

Hasan Saleh (MathModel)

Solution 1

Remarquez qu'il n'y a que deux cas de parité de la somme du tableau, considérons quand est impair, considérons tous les choix possibles pour la somme des paires :

  • et donc le complémentaire est .

  • et donc le complémentaire est .

  • et donc le complémentaire est

Remarquez qu'aucune des configurations ne correspond à la parité, donc la réponse est quand (\sum a \bmod 2=1).

Maintenant, considérons quand est pair, nous avons toutes les configurations possibles :

  • et donc le complémentaire est .

  • et donc le complémentaire est .

  • et donc le complémentaire est

Remarquez que toutes les configurations correspondent, donc nous considérons tous les appariements qui est

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

Complexité .

#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;
}

Solution 2

Nous pouvons appairer séquentiellement chaque parité avec sa correspondante et accumuler le compte à chaque fois, chaque fois nous appairons les pairs avec les impairs et nous accumulons simplement le compte. Cela ne fonctionne que lorsque est pair, sinon c'est 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;
}

Complexité .