Codeforces Round # 650 (Div. 3) B. Even Array

B. Par
Límite de tiempo de matriz
por prueba Límite de memoria de 2 segundos por prueba 256 megabytes de
entrada Entrada
estándar Salida Salida estándar
Se le proporciona una matriz a [0… n − 1] de longitud n que consta de números enteros no negativos. Tenga en cuenta que los índices de matriz comienzan desde cero.

Una matriz se considera buena si la paridad de cada índice coincide con la paridad del elemento en ese índice. Más formalmente, una matriz es buena si para todo i (0≤i≤n − 1) se cumple la igualdad imod2 = a [i] mod2, donde xmod2 es el resto de dividir x entre 2.

Por ejemplo, las matrices [0,5,2,1] y [0,17,0,3] son ​​buenas y la matriz [2,4,6,7] es incorrecta, porque para i = 1, las paridades de i y a [i] son ​​diferentes: imod2 = 1mod2 = 1, pero a [i] mod2 = 4mod2 = 0.

En un movimiento, puede tomar dos elementos de la matriz e intercambiarlos (estos elementos no son necesariamente adyacentes).

Encuentre el número mínimo de movimientos en los que puede hacer que la matriz sea buena, o diga que esto no es posible.

Entrada
La primera línea contiene un solo entero t (1≤t≤1000) - el número de casos de prueba en la prueba. Luego siguen t casos de prueba.

Cada caso de prueba comienza con una línea que contiene un número entero n (1≤n≤40) - la longitud de la matriz a.

La siguiente línea contiene n enteros a0, a1,…, an − 1 (0≤ai≤1000) - la matriz inicial.

Salida
Para cada caso de prueba, genere un único entero: el número mínimo de movimientos para que la matriz dada sea buena, o -1 si esto no es posible.

Ejemplo
de entrada

4
4
3 2 7 6
3
3 2 6
1
7
7
4 9 2 1 18 3 0
de salida
2
1
-1
0
Mi respuesta Código:

/*
	Author:Albert Tesla Wizard
	Time:2020/10/29 18:27
*/
#include<bits/stdc++.h>
using namespace std;
int verdict1(vector<int>a)
{
    
    
    int cnt=0;
    for(int i=0;i<a.size();i+=2)
    {
    
    
        if(a[i]%2!=i%2)cnt++;
    }
    return cnt;
}
int verdict2(vector<int>a)
{
    
    
    int cnt=0;
    for(int i=1;i<a.size();i+=2)
    {
    
    
        if(a[i]%2!=i%2)cnt++;
    }
    return cnt;
}
int main()
{
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t,num;
    cin>>t;
    vector<int>ans(t);
    for(int i=0;i<t;i++)
    {
    
    
        cin>>num;
        vector<int>a(num);
        for(int j=0;j<num;j++)cin>>a[j];
        if(verdict1(a)==verdict2(a))ans[i]=verdict1(a);
        else ans[i]=-1;
    }
    for(int i=0;i<t;i++)cout<<ans[i]<<'\n';
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/AlberTesla/article/details/109366117
Recomendado
Clasificación