2 / 9
Sep 2016

Witam,
Mam problem z zadaniem "Konkrus Pseudomatematyczny" ID: 1149
Mój kod przechodzi wszelkie możliwe testy jakie mu narzucę, lecz SPOJ nieustannie go odrzuca.
Czy mogę liczyć na jakieś wskazówki?

int max(int *tab, int n)
{
int max;
for (int i = 0; i < n; ++i)
{
if (i >= n) break;
if (tab[i] > tab[i + 1]) max = tab[i];
}
return max;
}

void quicksort(int *tablica, int lewy, int prawy)
{
int v = tablica[(lewy + prawy) / 2];
int i, j, x;
i = lewy;
j = prawy;
do {
while (tablica[i]<v) i++;
while (tablica[j]>v) j--;
if (i <= j) {
x = tablica[i];
tablica[i] = tablica[j];
tablica[j] = x;
i++; j--;
}
} while (i <= j);
if (j>lewy) quicksort(tablica, lewy, j);
if (i<prawy) quicksort(tablica, i, prawy);
}

int main()
{
int test;
cin >> test;
for (int t = 1; t <= test; ++t)
{

	int n;
	cin >> n;

	int *tab = new int[n];
	for (int i = 0; i < n; ++i)
	{
		cin >> tab[i];
	}

	quicksort(tab, 0, n - 1);

	for (int i = 0; i < n; ++i)
	{
		if (tab[i] == max(tab, n)) cout << tab[i] << " ";
	}

	for (int i = 0; i < n; ++i)
	{
		if (tab[i] == max(tab, n)) continue;
		cout << tab[i] << " ";
	}
	delete[] tab;
}
system("PAUSE");
return 0;

}

  • created

    Sep '16
  • last reply

    Feb '23
  • 8

    replies

  • 882

    views

  • 5

    users

  • 1

    like

  • 2

    links

wskazówki:
1) dołączamy się do istniejącego wątki, jeżeli istnieje (dla tego zadania istnieje)
2) tekst programu przekazujemy jako link do ideone.com19

sprawdź wynik programu dla danych:

2
4 1 1 1 1
3 999 998 997

sprawdzenie zrób na ideone.com19 (bo wyniki mogą być różne w zależności od użytego kompilatora)

Dziękuję za wskazówki i przepraszam za zamieszanie. Mój pierwszy wpis na forum :sweat_smile:
Sprawdziłem dla twoich danych i program działa. Na ideone.com jednak wyskakuje "przekroczono limit czasu".
Mam jednak wątpliwość, gdyż na SPOJ wyskakuje komunikat o błędnej odpowiedzi, a nie o limicie czasu.
Wnioskuję więc, że mam poprawić szybkość programu i SPOJ powinien zaakceptować program?

a na ideone.com wstawiłeś dane testowe (które podałem) w pole "enter input (stdin)" ?

Aha, okej. Nie wiedziałem, że istnieje taka opcja.
Teraz faktycznie wykrywa błąd.
Ale w takim razie nie mam pojęcia od czego zacząć :disappointed_relieved: skoro w moim kompilatorze wszystko gra, to w czym może tkwić problem?
Jakieś sugestie?

Nie oceniam jakości kodu ani jego (bez)sensu, nie udzielam również wskazówek, jak poprawić program.
Jedynie (jeżeli to możliwe) podaję dane, dla których program działa źle - znaleziony samemu własny błąd pamięta się znacznie lepiej :slight_smile:

6 years later

Cześć, czy mógłby mi ktoś powiedzieć gdzie leży błąd w programie ? Sam nie wiem gdzie go szukać i co mogło być błędem.

ciężko powiedzieć gdzie jest błąd w programie który dostaje AC.
Edit… Po komentarzu poniżej i małej zmianie program dostał AC w C14… Bez tego było AC bez problemu w C++4.3.2 ktoś wie dla czego?

Jedna z pętli ma niepoprawny warunek końca, i nie radzi sobie z sytuacją gdy ilość punków zdobytych przez wszystkich uczestników jest taka sama. Możesz spróbować poniższe wejście, ale że program ma niezdefiniowane zachowanie, to się może też zdarzyć że wszystko będzie “działać”.

1
2
0 0