Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <algorithm>
- #pragma warning(disable:4996)
- using namespace std;
- string L_skobki = "{[(";
- string R_skobki = "}])";
- bool in_list(char x,string list)
- {
- bool F = 0;
- for (int i = 0; i < list.length(); i++)
- {
- if (list[i] == x)
- {
- F = 1;
- break;
- }
- }
- return F;
- }
- int number_in_list(char x, string list)
- {
- int F = 0;
- for (int i = 0; i < list.length(); i++)
- {
- if (list[i] == x)
- {
- F = i+1;
- break;
- }
- }
- return F;
- }
- string extract_skobki_from(string input_s)
- {
- string answer = "";
- for (int i = 0; i < input_s.length(); i++)
- {
- if ((input_s[i] == ':') && (i< input_s.length()-1) )
- {
- if (in_list(input_s[i + 1], R_skobki) || in_list(input_s[i + 1], L_skobki))
- {
- i++;
- continue;
- }
- }
- if (in_list(input_s[i], R_skobki) || in_list(input_s[i], L_skobki))
- {
- answer += input_s[i];
- }
- }
- return answer;
- }
- int proverka_1(string input)
- {
- string skobki = extract_skobki_from(input);
- int close_availible = 0, answer = 0;
- for (int i = 0; i < skobki.length(); i++)
- {
- if (in_list(skobki[i], L_skobki))
- {
- close_availible++;
- }
- else if (close_availible != 0)
- {
- close_availible--;
- }
- else
- {
- answer = 1;
- }
- }
- return answer;
- }
- int proverka_3(string input)
- {
- //если работает медленно то написать экстракт отдельно
- int answer = 0;
- int LEFT[4] = { 0 };
- int RGHT[4] = { 0 };
- for (int i=0;i<input.length();i++)
- {
- int in_Left = number_in_list(input[i], L_skobki);
- if(in_Left)
- {
- LEFT[in_Left]++;
- }
- else
- {
- int in_Right = number_in_list(input[i], R_skobki);
- if (in_Right)
- {
- RGHT[in_Right]++;
- }
- }
- }
- for (int i = 1; i < 4; i++)
- {
- if (LEFT[i] != RGHT[i])
- {
- answer =3;
- break;
- }
- }
- return answer;
- }
- int proverka_2(string input)
- {
- int answer = 0, N = input.length();
- bool Need_to_brake=0;
- int i = 0;
- while (!Need_to_brake)
- {
- Need_to_brake = 1;
- if (input[i] != 0)
- {
- Need_to_brake = 0;
- bool truemeter = 0;
- for (int k = i+1; k < N; k++)
- {
- if (((k - i) & 1) && (((number_in_list(input[i], L_skobki) != 0 )&&(number_in_list(input[k], R_skobki) != 0)) && (number_in_list(input[i], L_skobki) == number_in_list(input[k], R_skobki))))
- {
- input[i] = 0;
- input[k] = 0;
- truemeter = 1;
- break;
- }
- }
- if (!truemeter)
- {
- answer = 2;
- break;
- }
- }
- i++;
- if (answer)
- {
- break;
- }
- }
- return answer;
- }
- int main()
- {
- int N;
- cin >> N;
- for (int t = 0; t < N+1; t++)
- {
- int answ = 0;
- string input;
- getline(cin, input);
- //input=input+" ";
- string skobki = extract_skobki_from(input);
- if (proverka_1(skobki))
- {
- answ = 1;
- }
- else if ( proverka_2(skobki))
- {
- answ = 2;
- }
- else if (proverka_3(skobki))
- {
- answ = 3;
- }
- if (t != 0)
- {
- cout << answ;
- }
- }
- /*cout << proverka_1(skobki) << endl;
- cout << proverka_3(skobki) << endl;
- cout << proverka_2(skobki) << endl;*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement