Zrobiłem program sprawdzający poprawne nawiasowanie lecz dostaję za niego 0 pkt... gdzie może być błąd? Wydaje mi się że wszystko działa... treść zadania:
Podany jest napis składający się z nawiasów () i []. Mówimy, że napis jest poprawny, jeśli spełnia jeden z poniższych warunków:
* jest to pusty napis,
* jeżeli A i B są poprawne, to AB jest poprawne,
* jeżeli A jest poprawny, to (A) i [A] są także poprawne.
Napisz program, który dla podanego napisu sprawdzi jego poprawność. Twój program może zakładać, że maksymalna długość łańcucha wynosi 128 znaków.
Dane wejściowe składają się z jednej liczby nieujemnej N podanej w pierwszym wierszu oraz sekwencji N napisów złożonych z nawiasów () i []. Każdy napis jest podany w osobnym wierszu.
Jako wynik Twój program powinien dla każdego napisu wypisać na ekranie słowo Yes, w przypadku gdy napis jest poprawny, lub słowo No gdy tak nie jest.
Przykładowe dane:
3
([])
(([()])))
([()[]()])()
Wynik:
Yes
No
Yes
# include <cstdio>
# include <cstdlib>
# include <cstring>
# include <iostream>
# include <vector>
using namespace std;
vector<char> stos;
int kwadratowe = 0;
int okragle = 0;
int a=-1;
int n=0;
int main()
{
cin>>n;
for(int d=0; d<n; d++)
{
kwadratowe = 0;
okragle = 0;
a=-1;
stos.clear();
string nawiasy;
cin>>nawiasy;
for(int i=0; i<nawiasy.length(); i++)
{
stos.push_back(nawiasy[i]);
a++;
if((stos[a] == ']') && (stos[a-1] == '['))
{
stos.pop_back();
stos.pop_back();
kwadratowe++;
a--;
a--;
}
if((stos[a] == ')') && (stos[a-1] == '('))
{
stos.pop_back();
stos.pop_back();
okragle++;
a--;
a--;
}
}
if((kwadratowe*2)+(okragle*2) == nawiasy.length())
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}