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? #include<iostream> #include<queue> using namespace std;
priority_queue < int, vector < int >, greater < int > > kolejka; 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; }
|
|
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 #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; } }
|
|
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? |
|
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 |
|
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ć #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; } } |
|
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. |
|
mateczek |
» 2017-10-10 21:26:57 https://ideone.com/YQyRm3włą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 #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; } } |
|
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 |
|
« 1 » 2 |