Sottoponendo il codice di seguito ottengo che la metà dei testcase errati per signal 11
:
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int N;
cin >> N;
string E;
cin >> E;
const string dict = "<([{>)]}";
// vettore contenente gli indici delle parentesi rispetto alla stringa dict
vector<int> e;
for (auto p : E)
e.push_back(dict.find(p));
stack<int> parentesi;
bool corretta = true;
for (auto p : e) {
if (p < 4)
parentesi.push(p);
else {
corretta = (parentesi.top() == p - 4);
parentesi.pop();
}
if (!corretta)
break;
}
cout << (corretta && parentesi.empty() ? "corretta" : "malformata");
return 0;
}
Riscrivendo il codice e utilizzando un vector come stack riesco a ottenere 70/100 con due testcase che risultano signal 11
:
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int N;
cin >> N;
string E;
cin >> E;
const string dict = "<([{>)]}";
vector<int> e, parentesi;
for (auto p : E)
e.push_back(dict.find(p));
bool corretta = true;
for (auto p : e) {
if (p < 4)
parentesi.push_back(p);
else {
corretta = (parentesi.back() == p - 4);
parentesi.pop_back();
}
if (!corretta)
break;
}
cout << (corretta && parentesi.empty() ? "corretta" : "malformata");
return 0;
}
Sinceramente non riesco a capire il problema.
Qualche soluzione?
Grazie in anticipo