zadanie na spoju (konkurs pseudomatematyczny) - zestaw testów

0

Witam, mam mały problem z zadaniem na spoju, a mianowicie zestaw testowy działa, nawet dość ekstremalne i nieprzwidywalne testy działają, a jednak na spoju jest Wrong Answer, link do zadania -> http://pl.spoj.com/problems/MWPZ06H/ Oczywiście jak to na spoju teść zadania jest poprzedzona fabularyzowaną historią ze zwrotami akcji :) więć żeby skróce treść zadania trzeba, posortować liczby (może być ich maksymalnie 200 ) z przedziału liczb Naturalnych. Trzeba posortować tak że największa wartość jest na początku (jeżeli są dwie takie same największe wartości lub więcej to też mają być na początku) a potem w kolejności rosnącej reszte wartości.
Tutaj mój kod

#include <iostream>

using namespace std;


void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while(tablica[i]<v) i++;
        while(tablica[j]>v) j--;
        if(i<=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }
    }
    while(i<=j);
    if(j>lewy) quicksort(tablica,lewy, j);
    if(i<prawy) quicksort(tablica, i, prawy);
}

int main()
{
    int ile=0, uczestnicy=0, s=0;
    cin>>ile;
    for(int i=0; i<ile; i++)
    {
        cin>>uczestnicy;
        int *punkty;
        punkty = new int [uczestnicy];
        for(int j=0; j<uczestnicy; j++)
        {
            cin>>punkty[j];
        }
        if(uczestnicy == 1)
        {
            cout<<punkty[uczestnicy-1]<<endl;
        }
        else
        {
            quicksort(punkty, 0, punkty[uczestnicy-1]);
            for(int q=0; q<uczestnicy; q++)
            {
                if(punkty[uczestnicy-1] == punkty[q])
                {
                    cout<<punkty[q]<<endl;
                    s++;
                }
            }
            for(int z=0; z<uczestnicy-s; z++)
            {
                cout<<punkty[z]<<endl;
            }
        }
        punkty = NULL;
        uczestnicy=0;
        s=0;
    }

    return 0;
}

 

spojowy test
Wejście:

3
5
1 2 3 4 5
5
4 5 2 3 5
2
1 1

Wyjście:

5 1 2 3 4
5 5 2 3 4
1 1

1

Po co wymyślać koło na nowo: http://www.cplusplus.com/reference/algorithm/sort/?kw=sort

for(int q=0; q<uczestnicy; q++)
{
    if(punkty[uczestnicy-1] == punkty[q])
    {
        cout<<punkty[q]<<endl;
        s++;
    }
}

Przecież te największe wartości są na końcu, więc po co lecisz od początku po całej tablicy? Leć od tyłu, wypisz tylko te największe i zakończ pętlę jak spotkasz nową wartość.

punkty = NULL;

A gdzie delete[]? Wyciek.

0

A w ogóle popatrzyłeś na to co Twój program wypluwa? Przecież nawet dla przykładów testowych widać, że złe formatowanie ma.
Podpowiedź: nie należy wypluwać entera po każdej liczbie.

0

Dla każdego zestawu danych należy wypisać w ->osobnej linii<-, uszeregowane w kolejności zgodnej z rankingiem, liczby punktów zdobyte przez zawodników.
Tak jest napisane na spoju

1

Dla każdego zestawu danych, nie dla każdej liczby.
Poza tym wystarczy popatrzeć na przykładowe wyjście. Przecież Twoje "każda liczba sama w linii" w żaden sposób nie wygląda podobnie do tego co jest w przykładzie.

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