Pagini recente » Cod sursa (job #2848463) | Cod sursa (job #454171) | Cod sursa (job #2254171) | Cod sursa (job #2640904) | Cod sursa (job #2808907)
#include <fstream>
#include <stack>
#include <bitset>
using namespace std;
bitset<1000001>bracket_couples_indexes;
void find_coupled_brackets(stack<pair<char, int>> open_brackets, string brackets, int length) {
for (int i = 0; i < length; ++i) {
if (brackets[i] == '(' || brackets[i] == '[' || brackets[i] == '{') {
open_brackets.push(make_pair(brackets[i], i));
} else if (!open_brackets.empty() && ((brackets[i] == ')' && open_brackets.top().first == '(') || (brackets[i] == ']' && open_brackets.top().first == '[') || (brackets[i] == '}' && open_brackets.top().first == '{'))) {
bracket_couples_indexes[open_brackets.top().second] = true;
bracket_couples_indexes[i] = true;
open_brackets.pop();
} else {
while (!open_brackets.empty()) {
open_brackets.pop();
}
}
}
}
int get_longest_well_formed_seq(int length) {
int max_length = 0, current_length = 0;
for (int i = 0; i <= length; ++i) {
if (bracket_couples_indexes[i]) {
++current_length;
if (!bracket_couples_indexes[i + 1]) {
max_length = max(max_length, current_length);
current_length = 0;
}
}
}
return max_length;
}
int main() {
ifstream fin("paranteze.in");
ofstream fout("paranteze.out");
int length;
string brackets;
fin >> length >> brackets;
stack<pair<char, int>> open_brackets;
find_coupled_brackets(open_brackets, brackets, length);
fout << get_longest_well_formed_seq(length);
return 0;
}