Konkurs pseudomatematyczny, spoj

0

Witam, problem z kolejnym zadaniem. Spoj nie akceptuje, ponieważ "Błąd kompilacji", a u mnie śmiga wszystko jak należy. Proszę o wskazanie błędu ;)
(Rozwiązanie trochę może dziwne, ale jeszcze nie oswoiłem dobrze STLa)

 
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	int liczba_graczy;
	int a;
	int t;
	cin >> t;
	for (int j=0; j<t; j++)
	{
		cin>>liczba_graczy;
		vector <int> vec;
		vector <int> zamienny;
		for (int i=0; i<liczba_graczy; i++)
		{
			cin>>a;
			vec.push_back(a);
		}
		sort(vec.begin(), vec.end());
		if(vec[liczba_graczy-1]==vec[liczba_graczy-2])
		{
			zamienny.push_back(vec[liczba_graczy-1]);
			zamienny.push_back(vec[liczba_graczy-2]);
			vec.erase(vec.end()-1);
			vec.erase(vec.end()-1);
		}
		else if(vec[liczba_graczy-1]!=vec[liczba_graczy-2])
		{
			zamienny.push_back(vec[liczba_graczy-1]);
			vec.erase(vec.end()-1);
		}	
		for (auto i=0; i<zamienny.size(); ++i)
			cout<<zamienny[i];
		for (auto i=0; i<vec.size(); ++i)
			cout<<vec[i];
		cout<<endl;
	}
	return 0;
}
1

Zmień auto na int i spróbuj.

3

Czyżby spoj nie obsługiwał C++11? Wywal te auto, chociaż kod jest poprawny syntaktycznie.

0

Pomogło, teraz mam błędną odpowiedź. Kompilowałem na ideone.com i mam error terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc. Rezerwuje zbyt dużo pamięci, nie do końca to rozumiem, proszę o pomoc

0

A input wprowadziłeś?

1

ed977bc8b4.png
Może klikniesz i przestaniesz zawracać głowę?

0

Ma ktoś pomysł skąd "Błędna odpowiedź"?

0
_13th_Dragon napisał(a):

ed977bc8b4.png
Może klikniesz i przestaniesz zawracać głowę?

Na rysunku widać C++ 4.3.2 więc zapomnij o C++11.

0
Garniturek napisał(a):

Ma ktoś pomysł skąd "Błędna odpowiedź"?

Zacznij od podania linka do zadania.
Uruchomiłeś swój kod przynajmniej z przykładem podanym w zadaniu? Czy twój kod zwraca właściwą odpowiedź?

0

Link: http://pl.spoj.com/problems/MWPZ06H/
Oczywiście dla każdego z podanych przykładów zwraca odpowiednią wartość

0

@Garniturek sprawdź w zadaniu napisane jest ograniczenie pamięciowe, może może 8*liczba_graczy to nieco za dużo.

1

Dla danych wejściowych:
1
10
9 9 9 9 9 1 2 3 4 5

Prawidłowy out to:
9 9 9 9 9 1 2 3 4 5

U Cb (jak dobrze skompilowałem oczami) wychodzi:
9 9 1 2 3 4 5 9 9 9

0
#include <cstdio>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

int main()
  {
   unsigned t,n;
   for(scanf("%u",&t);t--;printf("\n"))     
     {
      scanf("%u",&n);
      vector<unsigned> tb(n);
      while(n--) scanf("%u",&tb[n]);
      sort(tb.begin(),tb.end(),greater<unsigned>());
      vector<unsigned>::iterator pos=tb.begin();
      while(*(++pos)==tb.front()) {}
      reverse(pos,tb.end());
      for(pos=tb.begin();pos!=tb.end();++pos) printf("%d ",*pos);
     }
   return 0;
  }
0

Poprawiłem kod zgodnie z radą @Pijany_Młot. Teraz działa poprawnie dla dowolnej liczby liczb największych, ale Spoj cały czas odrzuca program. Macie jeszcze jakieś sugestie? :)
Wolałbym mój kod zmieniać, niż brać od kogoś, ale dzięki za przedstawienie waszych pomysłów ;)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	int liczba_graczy;
	int a;
	int t;
	cin >> t;
	for (int j=0; j<t; j++)
	{
		cin>>liczba_graczy;
		vector <int> vec;
		vector <int> zamienny;
		for (int i=0; i<liczba_graczy; i++)
		{
			cin>>a;
			vec.push_back(a);
		}
		if (liczba_graczy==1)
			cout<<a<<endl;
		else
		{
			sort(vec.begin(), vec.end());
			zamienny.push_back(vec[liczba_graczy-1]);
			for (int i=liczba_graczy; i!=0; i--)
			{
				if(vec[i-1]==vec[i-2])
				{
					zamienny.push_back(vec[i-2]);
					vec.erase(vec.end()-2);
					if (i==2)
					{
						zamienny.erase(zamienny.begin());
						break;

					}
				}
				else
				{
					vec.erase(vec.end()-1);
					break;
				}
			}

			for (int i=0; i<zamienny.size(); ++i)
				cout<<zamienny[i];
			for (int i=0; i<vec.size(); ++i)
				cout<<vec[i];
			cout<<endl;
		}
	}
	system("pause");
	return 0;
}
 
0

system("pause");

0

@Garniturek ktoś Ci spacje ukradł :O

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