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

SPOJ Konkurs pseudomatematyczny [MWPZ06H]

0 głosów
132 wizyt
pytanie zadane 30 sierpnia 2019 w SPOJ przez Psz3mo Gaduła (4,890 p.)
zmienione kategorie 30 sierpnia 2019 przez Patrycjerz

Witam, mam problem z tym zadaniem na SPOJ-u : https://pl.spoj.com/problems/MWPZ06H/ , ponieważ sędzia stwierdza że błędna odpowiedź a u mnie (code::blocks) wszystko dobrze działa. Nie wiem w czym tkwi problem jak by ktoś mógł pomóc lub nakierować mnie na jakiś błąd. Oto cały program:

 

#include <iostream>

using namespace std;

int t,n,a,l,*tab;

void quicksort(int lewy, int prawy)
{
    int i,j,piwot;

    i = (lewy + prawy) / 2;
    piwot = tab[i];
    tab[i] = tab[prawy];
    for(j = i = lewy; i < prawy; i++)
        if(tab[i] < piwot)
        {
            swap(tab[i], tab[j]);
            j++;
        }
    tab[prawy] = tab[j];
    tab[j] = piwot;
    if(lewy < j - 1)
        quicksort(lewy, j - 1);
    if(j + 1 < prawy)
        quicksort(j + 1, prawy);
}

int main()
{
    cin>>t;
    for(int i = 0; i<t; i++)
    {
        cin>>n;
        tab = new int [n];
        for(int j = 0; j<n; j++)
        {
            cin>>tab[j];
        }
        quicksort(0,n-1);
        if(n>2)
        {
            cout<<tab[n-1]<<" ";
            if(tab[n-2]==tab[n-1])
            {
                cout<<tab[n-2]<<" ";
                a++;
                if(tab[n-3]==tab[n-2])
                {
                    cout<<tab[n-3]<<" ";
                    a++;
                    for(int u = n-4;u>1;--u)
                    {
                        if(tab[u]==tab[u+1])
                        {
                            cout<<tab[u]<<" ";
                            a++;
                        }
                        else continue;
                    }


                }
            }
            cout<<tab[0]<<" ";
            for(int k = 1; k<n-a-1; k++)
            {
                cout<<tab[k]<<" ";
                l++;
            }
            cout<<endl;
            l=0;
            a=0;
        }
        else
        {
            if(n==2)
            {
               if(tab[n-1]>=tab[n-2])
               {
                   cout<<tab[n-1]<<" "<<tab[n-2]<<endl;
               }
               else if(tab[n-1]<tab[n-2])
               {
                   cout<<tab[n-2]<<" "<<tab[n-1]<<endl;
               }
            }
            else if(n==1)
            {
                cout<<tab[n-1]<<endl;
            }
            else if(n<=0)
            {
                cout<<"0"<<endl;
            }
        }
    }

    delete [] tab;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 30 sierpnia 2019 przez j23 Mędrzec (164,240 p.)

Można prościej:

	int tab[200], D, N;

	std::cin >> D;
	
	while (D--) {
		std::cin >> N >> tab[0];
		int max = tab[0]; 		
		for (int i = 1; i < N; ++i) { 
			std::cin >> tab[i]; 
			if(max < tab[i]) max = tab[i];
		}
		
		std::sort(tab, tab + N, [max](int a, int b) {
			if(a == max) return true;
			if(b == max) return false;
			return a < b;
		});
		
		for (int i = 0; i < N; ++i) { std::cout << tab[i] << ' '; }
		std::cout << '\n';
	}

 

komentarz 30 sierpnia 2019 przez Psz3mo Gaduła (4,890 p.)
No można było i tak, ale to był moj pierwszy pomysł na to zadanie wiec dlatego tak wygląda.

Podobne pytania

0 głosów
0 odpowiedzi 109 wizyt
0 głosów
0 odpowiedzi 67 wizyt
0 głosów
1 odpowiedź 181 wizyt
pytanie zadane 13 lipca 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

85,082 zapytań

133,883 odpowiedzi

296,815 komentarzy

56,216 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...