Cod sursa(job #3152672)

Utilizator SSKMFSS KMF SSKMF Data 26 septembrie 2023 10:48:03
Problema Balanta Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.39 kb
#include <fstream>
using namespace std;

ifstream cin ("balanta.in");
ofstream cout ("balanta.out");

bool eliminat[2][1025];

int main ()
{
    int numar_monede , incercari;
    cin >> numar_monede >> incercari;

    int ramas = (numar_monede << 1);
    for (int eliminare = 1 ; eliminare <= incercari && ramas > 2 ; eliminare++)
    {
        int lungime;
        cin >> lungime;

        int multime[1025];
        for (int indice = 1 ; indice <= numar_monede ; indice++)
            multime[indice] = 0;

        for (int indice_1 = 1 , valoare ; indice_1 <= 2 ; indice_1++)
            for (int indice_2 = 1 ; indice_2 <= lungime ; indice_2++)
                { cin >> valoare; multime[valoare] = indice_1; }

        int sens;
        cin >> sens;

        switch (sens)
        {
            case 0:
                for (int indice = 1 ; indice <= numar_monede ; indice++)
                    if (multime[indice]) 
                    {
                        if (!eliminat[0][indice]) { eliminat[0][indice] = true; ramas--; }
                        if (!eliminat[1][indice]) { eliminat[1][indice] = true; ramas--; }
                    }
            break;

            case 1:
                for (int indice = 1 ; indice <= numar_monede ; indice++)
                {
                    if (multime[indice] != 1 && !eliminat[0][indice]) { eliminat[0][indice] = true; ramas--; }
                    if (multime[indice] != 2 && !eliminat[1][indice]) { eliminat[1][indice] = true; ramas--; }
                }
            break;
        
            case 2:
                for (int indice = 1 ; indice <= numar_monede ; indice++)
                {
                    if (multime[indice] != 2 && !eliminat[0][indice]) { eliminat[0][indice] = true; ramas--; }
                    if (multime[indice] != 1 && !eliminat[1][indice]) { eliminat[1][indice] = true; ramas--; }
                }
            break;
        }
    }

    if (!ramas)
        cout << '0';
    else
    {
        int falsificat = 0;
        for (int indice = 1 ; !falsificat ; indice++)
            if (!eliminat[0][indice] || !eliminat[1][indice])
                { ramas -= eliminat[0][indice] + eliminat[1][indice] ; falsificat = indice;}

        if (!ramas)
            cout << falsificat;
        else
            cout << '0';
    }

    cout.close(); cin.close();
    return 0;
}