1410 - Ele Está Impedido!

Um problema um pouco estranho, mas vamos lá!

Descrição

Solução

Existem duas regras do enunciado que indicam quando um jogador não está impedido. Elas são:

  1. Quando o jogador atacante está na mesma linha do penúltimo jogador defensor

  2. Quando o jogador atacante está na mesma linha dos dois últimos jogadores defensores

Ora, se o jogador atacante está na mesma linha que os dois últimos jogadores defensores, então ele está na mesma linha do penúltimo jogador defensor. Com isso, a regra 2 não é necessária.

Desta maneira, para verificarmos se algum jogador atacante está impedido, na verdade só nos interessa saber se o jogador mais perto do gol está impedido ou não. Se este jogador não estiver impedido, como os outros jogadores estão mais longe do gol, então eles também não estarão impedidos. Se ele estiver impedido, então algum jogador está impedido e podemos retornar Y.

Logo, precisamos apenas verificar se o atacante mais próximo do gol está na frente do penúltimo defensor mais perto do gol. Para isso, precisamos apenas ordenar os atacantes e defensores para descobrirmos quem é quem e fazermos nossa comparação.

#include <stdlib.h>
#include <stdio.h>

int comp(const void *a, const void *b)
{
    return (*(int *)a - *(int *)b);
}

int main()
{
    int A, D, atacantes[11], defensores[11];

    while (scanf("%d %d", &A, &D))
    {
        if (!A && !D)
            break;

        for (int i = 0; i < A; ++i)
        {
            scanf("%d", &atacantes[i]);
        }

        for (int i = 0; i < D; ++i)
        {
            scanf("%d", &defensores[i]);
        }

        qsort(atacantes, A, sizeof(int), comp);
        qsort(defensores, D, sizeof(int), comp);

        int atacante = atacantes[0];
        int penultimo = defensores[1];

        printf("%c\n", atacante < penultimo ? 'Y' : 'N');
    }

    return 0;
}

Last updated