• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konkurs Pseudomatematyczny ze SPOJ

Fiszki IT
Fiszki IT
0 głosów
45 wizyt
pytanie zadane 3 dni temu w C i C++ przez Endersik Nowicjusz (140 p.)
edycja 3 dni temu przez Endersik

Witam, mam problem mianowicie sędzia nie akceptuje mojego zadania. Testowałem wszystkie mozliwosci np dałem 200 uczestników ktorzy mieli od 800 do 1000 punktów (maksymalne wartości tych danych według zadania) i normalnie działało albo jak szukałem na forum jakiś błędów w tym zadaniu to wtedy znalazłem kilka przykładów i one też działały

Nie mam już pomysłów co tu poprawić dlatego proszę o pomoc/wskazówkę co jest z tym nie tak.

Link do Zadania: https://pl.spoj.com/problems/MWPZ06H/

Kod na Ideone: https://ideone.com/AhuQ73

Lub:

#include<iostream>
using namespace std;
int t, Members;
int main()
{
    cin>>t;
    for (int i = 0; i != t; i++)
    {
        cin>>Members;
        int Najlepsza, Najmniejsza[2000], Punkty[2000];
        int IleNaj = 0, suma = 0;
        for (int j = 0; j != Members; j++)
        {
            cin>>Punkty[j];
            if (j != 0)
            {
                if (Najlepsza == Punkty[j])
                {
                    IleNaj++;
                }       
                else if (Najlepsza < Punkty[j])
                {
                    Najlepsza = Punkty[j];
                }
            }
            else if (j == 0)
            {
                Najlepsza = Punkty[0];
            }
        }
        
        for (int j = 0; j != Members; j++)
        {
            int jaki = 0;
            Najmniejsza[j] = Punkty[0];
            for (int h = 0; h != Members; h++)
            {
                if (Najmniejsza[j] >= Punkty[h])
                {
                    Najmniejsza[j] = Punkty[h];
                    jaki = h;
                }
            }
            Punkty[jaki] = Najlepsza;
        }
        
        for (int j = 0; j <= IleNaj; j++)
        {
            cout<<Najlepsza<<" ";
        }
        
        suma = Members - IleNaj - 1;
        for (int j = 0; j != suma; j++)
        {
            cout<<Najmniejsza[j]<<" ";
        }
        cout<<endl;
    }
    return 0;
} 

 

1 odpowiedź

+1 głos
odpowiedź 3 dni temu przez TOM_CPP Pasjonat (17,820 p.)
edycja 3 dni temu przez TOM_CPP

Masz błędną odpowiedź. Na przykład dla danych:

1
4
4 4 4 5

program generuje błędne rozwiązanie:

5 5 5 4

 

Polecam użyć w zadaniu kontener  std::multimap<int> Dodawane do niego elementy ( tutaj punkty ) są od razu wstawiane w kolejności rosnącej, a więc odpada potrzeba późniejszego ich sortowania.

#include <iostream>
#include <set>

using namespace std;

int main()
{
    int tries, members, points;

    cin >> tries;
    
    for( int t {0} ; t<tries ; ++t )
    {
        cin >> members;
        multiset<int> ranking;

        for( int i {0} ; i<members ; ++i )
        {
            cin >> points;
            ranking.insert(points);        
        }

        int best {*crbegin(ranking)};  
        for( auto iter = crbegin(ranking) ; iter != crend(ranking) ; ++iter )
        {   
            if( *iter != best ) break; 
            cout << best << ' ';
        }

        for( auto iter = cbegin(ranking) ; iter != cend(ranking) ; ++iter )
        {
            if( *iter == best ) break;
            cout << *iter << ' ';
        }
        
        cout<<endl;
    }
    
}

https://godbolt.org/z/9fY3cWoqd

 

A tak wygląda już poprawiony fragment kodu, który spowodował problem w SPOJ:

        int Najlepsza = -1, Najmniejsza[2000], Punkty[2000];
        int IleNaj = 0, suma = 0;
        for (int j = 0; j != Members; j++)
        {
                cin>>Punkty[j];
                if (Najlepsza < Punkty[j])
                {
                    Najlepsza = Punkty[j];
                    IleNaj = 0;
                }
                else if ( Najlepsza == Punkty[j] ) IleNaj++;  
        }

 

komentarz 1 dzień temu przez Endersik Nowicjusz (140 p.)
A to dziwne sprawdzałem mnóstwo razy różnych wyników i wszystko działało A tu proszę ukrył się jeden. Poduczę się multimap i poprawie kod na swój sposób. Dzięki za pomoc

Podobne pytania

0 głosów
1 odpowiedź 43 wizyt
0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 5 listopada 2019 w C i C++ przez cupoforanges Początkujący (380 p.)
0 głosów
1 odpowiedź 131 wizyt
pytanie zadane 30 sierpnia 2019 w SPOJ przez Psz3mo Gaduła (4,890 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

84,706 zapytań

133,512 odpowiedzi

295,904 komentarzy

55,988 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...