Mam do zrobienia pracę domową i siedzę nad nią od 4 godzin. Nie wiem co mam dalej zrobić. Program się kompiluje poprawnie ale wypluwa nie te dane co powinien. On nie jest dokończony bo nie jestem w stanie przebrnąć przez ten problem. Jestem dopiero początkujący w c++. Czy ktoś byłby w stanie mi pomóc?
Bezpieczni Alpiniści
Grupa alpinistów wspina się na szczyt podążając wąskim szlakiem. Taternicy idą jeden za drugim, ostrożnie, bo ́scieżka jest stroma i niebezpieczna. Część ze wspinaczy posiada zabezpieczenie w postaci liny, a pozostali niestety go nie mają. Wyposażenie grupy alpinistów można opisać przy pomocy cągu liter:
•B oznacza bezpiecznego alpinistę (wyposa ̇zonego w linę);
•Z oznacza zagrożonego alpinistę (bez liny).
Przykładowo, ciąg znaków BZZBZ oznacza grupę pięciu alpinistów, z których dwóch posiada liny. Na czele grupy znajduje się alpinista pierwszy z prawej (w tym przypadku bez liny). Kolegów jednak nie zostawia się bez pomocy w potrzebie. Alpinista z liną może podać linę koledze idącemu bezpośrednio przed nim (i wtedy obaj są bezpieczni), przy czym taki gest jest wykonywany naraz przez wszystkich alpinistów, którzy mogą go wykonać. Zatem w tym przypadku ciąg znaków ulegnie następującej zmianie:
BZZBZ−→BBZBB
Kolorem czerwonym oznaczono alpinistów, którzy stali się bezpieczni. Takie koleżeńskie gesty są powtarzane, dopóki są możliwe:
BBZBB−→BBBBB
W tym momencie wszyscy alpiniści są już bezpieczni – po dwóch gestach koleżeńskich.Oczywiście, nie dla każdej grupy alpinistów zapewnienie bezpieczeństwa wszystkim będzie możliwe. Alpinista, który idzie na początku grupy, nie może użyczyć swojej liny koledze, ponieważ przed nim nikt nie idzie.
Napisz program, który dla danej grupy alpinistów oblicza ilość potrzebnych gestów, aby wszyscy stali się bezpieczni, lub wyrokuje, że jest to niemożliwe.
Wejście
Pierwszy wiersz standardowego wejścia zawiera dodatnią liczbę całkowitą oznaczającą ilość zestawów danych czyli grup alpinistów (N≤200).
Każdy kolejny z wierszy zawiera ciąg liter B lub Z opisujących wyposażenie alpinistów w danej grupie (zgodnie z treścią zadania). Każda grupa liczy od 1 do 1 000 000 osób, przy czym można założyć, ̇ze łączna liczność wszystkich grup nie przekroczy 20 000 000.
Wyjście
Program powinien dla każdej grupy wypisać wiersz tekstu zawierający ilość potrzebnych gestów, które doprowadzą do sytuacji, kiedy wszyscy alpiniści w grupie staną się bezpieczni, lub liczbę −1, jeśli jest to niemożliwe.
Przykład
Dla przykładowego, podanego poniżej wejścia:
3
BZZBBZ
BZZZ
ZBBB
poprawnym wynikiem jest:
2
3
-1
Wyjaśnienie do przykładu: Pierwszy przypadek opisany jest w treści zadania. W drugim przypadku podawanie liny przebiega tak:
BZZZ−→BBZZ−→BBBZ−→BBBB
W trzecim przypadku ostatni alpinista nie może otrzymać liny.
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int N, przejscia;
string a,b,c;
main()
{
N=3;
cout << N<<endl;
a="BZZBB\n";
char a1=(a[1]);
b="ZBBZBZBB\n";
c="BBZZZZBZBZBZ\n";
int ailosc = a.length();
int bilosc = b.length();
int cilosc = c.length();
cout <<a;
cout <<b;
cout <<c;
if (a[0]=='Z')
{cout << "-1";
}
if (b[0]=='Z')
{cout << "-1";
}
if (c[0]=='Z')
{cout << "-1";
}
int h, k;
h=0;
k=0;
if (a[0]=='B')
{for (int i=1; i<=ailosc; i++)
{h=h++;
if ((a[h]=='Z')and(a[k]=='B'))
{a[h]='B';
przejscia=0;
przejscia=przejscia++;
}
k=k++;
}
}
cout << przejscia;
}