SPOJ czemu nie działa - program i algorytm dobry.

0

Cześć, jako że nigdy nie miałem nic wspólnego ze SPOJem, postanowiłem sprawdzić jak to jest i zrobić coś w ramach treningu. Wybrałem sobie jakieś proste zadanko, ale czego bym nie zrobił, SPOJ ciągle mi daje komunikat: błąd wykonania (NZEC).
Już nawet pilnuję spacji na końcu łańcuchów, bo nie mam pojęcia o co tam chodzi.

Zadanie: http://pl.spoj.com/problems/PP0602A/
Moje rozwiązanie (sprawdzone lokalnie na kilku przykładowych zestawach i działa)

static void PrintResults(int[] results)
{
    //parzyste
    for (int i = 0 + 1; i < results.Length; i = i + 2)
    {
        Console.Write(results[i].ToString() + " ");
    }

    //nieparzyste
    for (int i = 0; i < results.Length; i = i + 2)
    {
        Console.Write(results[i].ToString());
        if (i < results.Length - 1)
            Console.Write(' ');
    }
}


static int[] ParseInput(string s)
{
    string[] values = s.Split(' ');
    int[] result = new int[int.Parse(values[0])];

    for(int i = 1; i < values.Length; i++)
        result[i - 1] = int.Parse(values[i]);

    return result;
}

public static void Main(string[] args)
{
    int testCount = int.Parse(Console.ReadLine());
    int[][] tests = new int[testCount][];

    for (int i = 0; i < testCount; i++)
    {
        string input = Console.ReadLine();
        tests[i] = ParseInput(input);
    }

    for (int i = 0; i < testCount; i++)
    {
        PrintResults(tests[i]);
        Console.WriteLine();
    }
}

To jest to, co wklejam na SPOJ. W pierwszej wersji odczytywałem po prostu wszystkie liczby po kolei. Ale pomyślałem, że może faktycznie spoj wali całymi liniami tekstu, czyli np:

"3 9 8 7"
a nie:
3
9
8
7

Więc zmieniłem i dodałem metodę ParseInput, która to ogarnia.
Ale SPOJ ciągle mi pokazuje: błąd wykonania (NZEC).
Język C#. O co tu może chodzić?

0

O mój Boże. Mogliby o tym napisać, że spodziewają się dowolnego delimitera. Zmieniłem tego swojego Splita w taki sposób:

string[] values = s.Split(new string[] { " ", "\t", "\n" }, StringSplitOptions.RemoveEmptyEntries);

i zadziałało. Ale nie ukrywam, że trochę to frustrujące.

0

Jakby byli złośliwi to mogliby to puścić w jednej linijce (całość) - jeśli nie jest jasno opisany podział na nie (tak jak w tym zadaniu).

1

Jako sidenote, zauważ pewien fakt: nie musisz wypisywać danych po wczytaniu wszystkich danych. W ten sposób redukujesz złożoność pamięciową, bo trzymasz jednocześnie jedną linię zaledwie. Poza tym, nie potrzebujesz rzutować elementów na inty (poza pierwszym), tak samo by zadanie wyglądało gdybyś dostawał dowolne stringi nie zawierające białych znaków.

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