SPOJ - sędzia kalosz albo ja

0

Cześć, zwracam się do was o pomoc w znalezieniu winowajcy w kodzie na spoj.
Napisałem trochę co prawda zagmatwany algorytm (jestem początkujący), ale wyjście zgadza się z tym pokazanym na spoju sędzia jednak nie uznaje mi programu i wywala błędną odpowiedź.
Oto zadanie:

screenshot-20230117182003.png

A oto mój kod:

#include <iostream>

using namespace std;
int liczby[101];

int main()
{
    int l1, l2;
    int zestawy; cin >> zestawy;
    int skladowa = 1;
    int sk = 1;
    int max = 0;
    for (int i = 0; i < zestawy; i++)
    {
        int pary; cin >> pary;
        for (int j = 0; j < pary; j++)
        {
            cin >> l1; cin >> l2;

            if (l1 > max) max = l1;
            if (l2 > max) max = l2;

            if (j == 0)
            {
                liczby[l1] = 1; 
                liczby[l2] = 1;
            }
            else
            {
                if ((liczby[l1] == 0) ^ (liczby[l2] == 0))
                {
                    if (liczby[l1] > liczby[l2])
                        liczby[l2] = liczby[l1];
                    else 
                        liczby[l1] = liczby[l2];
                }

                else if (liczby[l1] == 0 && liczby[l2] == 0)
                {
                    skladowa++; sk++;
                    liczby[l1] = skladowa;
                    liczby[l2] = skladowa;
                }

                else if (liczby[l1] == liczby[l2])
                    continue;

                else
                {
                    sk--;
                    if (liczby[l1] > liczby[l2])
                    {
                        for (int h = 1; h <= max; h++)
                        {
                            if (liczby[h] == liczby[l1])
                                liczby[h] = liczby[l2];
                        }
                    }
                    else
                    {
                        for (int h = 1; h <= max; h++)
                        {
                            if (liczby[h] == liczby[l2])
                                liczby[h] = liczby[l1];
                        }
                    }
                }
            }
        }

        int* tablica = new int[max+1];
        int kolejnosc = 0;
        for (int j = 1; j <= max; j++)
        {
            if (liczby[j] == 0)
            {
                kolejnosc++;
                tablica[j] = kolejnosc;               
            }
            else
            {
                bool x = true;
                for (int h = j-1; h >= 1; h--)
                {
                    if (liczby[j] == liczby[h])
                    {
                        tablica[j] = tablica[h];
                        x = false;
                        break;
                    }                       
                }
                if (x)
                {
                    kolejnosc++;
                    tablica[j] = kolejnosc;      
                }
            }
        }

        for (int j = 1; j <= kolejnosc; j++)
        {
            cout << j << ": ";
            for (int h = 1; h <= max; h++)
            {
                if (tablica[h] == j)
                    cout << h << " ";
            }
            cout << endl;
        }  
        cout << endl;

        for (int j = 0; j <= 100; j++)
            liczby[j] = 0;
    }
    return 0;
}

3

Największy problem jest, to, że wszystko masz w main.
Takie coś trudno się czyta. Proponuje najpierw podzielić kod na mniejsze funkcje.

Daj linka do zadania, bo nie bedę przepisywał danych wejściowych z obrazka:
Dlaczego nie należy zamieszczać kodu w postaci obrazków

2

Na razie powien tyle, że masz wyciek pamięci: https://godbolt.org/z/9E3ve493E

1 użytkowników online, w tym zalogowanych: 0, gości: 1