Problem z algorytmem

Problem z algorytmem
AT
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:5
0

Dzień dobry mam do napisania pewien algorytm. Polega on na policzeniu ile minimalnie razy pływak przepłynął basen (mógł robić przerwy) . Na 1 wierszu wejścia dostajemy ilość zapisów odległości. (1 ≤ N ≤ 1 000 000) A na 2 odległości od brzegu (0 ≤ X ≤ 10^9). Na wyjściu musimy wypisać liczbę minimalnych przepłyniętych "basenów".
Napisałem pewien programik , ale dostaje tylko 22% punktów na i nie wiem dlaczego. Podsyłam kod. Mam nadzieję że jasno wytłumaczyłem zadanie.W punktację wlicza się szybkość działania algorytmu i czy potrafi przetworzyć duże dane (zgodne z zakresami).
Przykładowe wejścia i wyjścia

IN:
7
3 7 11 11 6 2 4

OUT:
3

Najpierw płynął do przodu aż do 11 metrów potem przerwa i wraca przez 6 do 0 i potem znowu płynie przez 2 i 4

Kopiuj
#include <iostream>

using namespace std;

int main() 
{
	long long n=0,a=0,b=0,c=0,i = 0,j = 2;
	long long x = 1;
	bool isToward = false , cancel = false;
	cin >> n;
	int tab[n];
	while(i<n)
	{
		cin >> tab[i]; 
		i++;
	}
	if(n > 2)
	{
	while(j < n)
	{
		a = tab[j-2];
		b = tab[j-1];
		c = tab[j];
		
		if(a > b && j==2) { x++;}
		//else {cout << "a: " << a << " b: " << b << " c: " << c << " x: " << x << endl;}
		if(a < b)
		{ isToward = true;} if(a > b){ isToward = false;} 
	
			if(isToward && c<b) {x++;}
			if(!isToward && c>b) {x++;}
		
	    cancel == false;
		j++;
		//cout << x << " " << j << endl;
		if(x==0) {x = 1;}
	}
    }
    else {x = 1;
	}
    cout << x << endl;
	return 0;
}



edytowany 3x, ostatnio: atomwoz
lion137
Podaj jeszcze jakieś przykładowe wejścia i wyjścia.
_13th_Dragon
Podejrzewam że rozwiązujesz nie postawione zadanie, zaś swoją interpretacje tego zadania. Podaj dokładną oryginalną treść zadania, ponieważ wyżej przedstawiona interpretacja nie daje się zrozumieć.
lion137
I? Opisz, jak powstało to 3 z tych wejść.
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:9 dni
3
Kopiuj
#include <iostream>
using namespace std;

int main() 
{
	size_t n,count=0;
	cin>>n;
	for(int direction=0,prev=0,curr;(n--)&&(cin>>curr);prev=curr)
	{
		if((prev!=curr)&&(direction!=(prev<curr)))
		{
			++count;
			direction=1-direction;
		}
	}
	cout<<count;
	return 0;
}

https://ideone.com/gjcpPk

Lub:

Kopiuj
#include <iostream>
using namespace std;
 
int main() 
{
	int n,count=0,direction=1,prev=0,next,curr;
	for(cin>>n;(n--)&&(cin>>curr);prev=curr)
	{
		if((next=(prev>curr)-(prev<curr))&&(direction!=next))
		{
			++count;
			direction=next;
		}
	}
	cout<<count;
	return 0;
}

https://ideone.com/6MDfCM


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 minuty
1

To zadanie nie wymaga użycia tablicy! Potrzebujesz tylko paru zmiennych: i, n, poprzednia_pozycja, aktualna_pozycja , liczba_nawrotow.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
AT
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:5
0

Bardzo dziękuje za pomoc udało się mam wszytko dobrze , poprzedni program był zbyt czaso i procesorochłonny:).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.