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

Konkurs Pseudomatematyczny ze SPOJ

Object Storage Arubacloud
0 głosów
499 wizyt
pytanie zadane 14 września 2021 w C i C++ przez Endersik Nowicjusz (160 p.)
edycja 14 września 2021 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ź 14 września 2021 przez TOM_CPP Pasjonat (22,640 p.)
edycja 14 września 2021 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 16 września 2021 przez Endersik Nowicjusz (160 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ź 445 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez janio11 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 5 listopada 2019 w C i C++ przez cupoforanges Początkujący (380 p.)
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 30 sierpnia 2019 w SPOJ przez Psz3mo Mądrala (5,030 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...