Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

illegal syscall

Ostatnio zmodyfikowano 2017-10-15 16:07
Autor Wiadomość
milmega
Temat założony przez niniejszego użytkownika
illegal syscall
» 2017-10-10 19:20:13
Program na wejsciu dostaje 'n' liczba 'a'. Ma wypisać te, które powtarzają się nieparzystą liczbę razy w kolejności rosnącej. Np. dla liczb 4, 2, 13, 2, 4, 4, powinien wypisać 4 oraz 13. Program u mnie działa, ale dla połowy testów w "sprawdzarce" wyskakuje illegal syscal. Ktoś wie co poszlo nie tak?
C/C++
#include<iostream>
#include<queue>
using namespace std;

priority_queue < int, vector < int >, greater < int > > kolejka; //rosnąco
priority_queue < int, vector < int >, greater < int > > liczby;

int main()
{
    int n, a, k;
    int poprzednia;
    int pary = 0;
    cin >> n;
    int kopiaN = n;
   
    while( n > 0 )
    {
        cin >> a;
        n--;
        kolejka.push( a );
    }
   
    for( int i = 0; i < kopiaN; i++ )
    {
        if( kolejka.size() > 0 )
        {
            k = kolejka.top();
            while( k == kolejka.top() )
            {
                poprzednia = k;
                kolejka.pop();
                pary++;
                if( kolejka.size() == 0 ) break;
               
            }
            if( pary % 2 != 0 )
            {
                liczby.push( poprzednia );
            }
            pary = 0;
        }
    }
    int wielkosc = liczby.size();
    for( int i = 0; i < wielkosc; i++ )
    {
        cout << liczby.top() << endl;
        liczby.pop();
    }
    return 0;
}
 
P-165615
mateczek
» 2017-10-10 20:09:37
pewnie przesadziłeś z pamięcią i potrzebna optymalizacja pod tym względem
spróbuj z kontenerem map
C/C++
#include <iostream>
#include<map>

using namespace std;

int main()
{
   
    map < int, int > kontener;
    int n;
    cin >> n;
    while( n-- ) {
        int liczba;
        cin >> liczba;
        kontener[ liczba ] ++;
    }
    for( auto it = kontener.begin(); it != kontener.end(); it++ ) {
        cout << it->first << " " << it->second << endl;
       
    }
}
P-165624
milmega
Temat założony przez niniejszego użytkownika
» 2017-10-10 21:06:33
Da się to jakoś zrobić bez zmiany całego kodu?
P-165628
milmega
Temat założony przez niniejszego użytkownika
» 2017-10-10 21:08:23
Zależałoby mi też, żeby program jednak działał uzywając kolejki lub stosu
P-165629
mateczek
» 2017-10-10 21:11:49
nie wiem czy się da. Musisz zoptymalizować!!! A tego kodu to aż tak wiele nie masz. Zwłaszcza, że to co wkleiłem chyba rozwiązuje twój problem. Czy to przejdzie przez sprawdzarkę tego nie wiem, Bo nawet nie mam pojęcia  gdzie przetestować
C/C++
#include <iostream>
#include<map>
using namespace std;
int main() {
    map < int, int > kontener;
    int n;
    cin >> n;
    while( n-- ) {
        int liczba;
        cin >> liczba;
        kontener[ liczba ] ++;
    }
    for( auto it = kontener.begin(); it != kontener.end(); it++ ) {
        if( it->second % 2 ) cout << it->first << endl;
       
    }
}
P-165631
milmega
Temat założony przez niniejszego użytkownika
» 2017-10-10 21:19:24
Narazie to nawet mi się to nie kompiluje. Wychodzi, ze 'It' nie został zadeklarowany.
P-165632
mateczek
» 2017-10-10 21:26:57
https://ideone.com/YQyRm3
włącz c++11 w swoim ide. Bo prawdopodobnie kompilator nie rozumie "auto". Zresztą warto się przyzwyczajać do nowszych standardów

jeśli już możesz zmienić kod na taki jak niżej i powinien pójść w wersji standardu z przed 2011 roku
C/C++
#include <iostream>
#include<map>

using namespace std;

int main()
{
   
    map < int, int > kontener;
    int n;
    cin >> n;
    while( n-- ) {
        int liczba;
        cin >> liczba;
        kontener[ liczba ] ++;
    }
    for( map < int, int >::iterator it = kontener.begin(); it != kontener.end(); it++ ) {
        if( it->second % 2 ) cout << it->first << endl;
       
    }
}
P-165633
milmega
Temat założony przez niniejszego użytkownika
» 2017-10-10 22:33:16
Sprawdzarka też korzysta z tej starej wersji ide także musi być na to jakis inny sposob.  Dodam, ze program musi sie zmieścić w : Time-2s | Memory - 2Mb
P-165634
« 1 » 2
  Strona 1 z 2 Następna strona