Problem z algorytmem

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

#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;
}



3
#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:

#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

1

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

0

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

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