Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <algorithm>
  5. #pragma warning(disable:4996)
  6. using namespace std;
  7. string L_skobki = "{[(";
  8. string R_skobki = "}])";
  9.  
  10. bool in_list(char x,string list)
  11. {
  12.     bool F = 0;
  13.     for (int i = 0; i < list.length(); i++)
  14.     {
  15.         if (list[i] == x)
  16.         {
  17.             F = 1;
  18.             break;
  19.         }
  20.     }
  21.     return F;
  22. }
  23. int number_in_list(char x, string list)
  24. {
  25.     int F = 0;
  26.     for (int i = 0; i < list.length(); i++)
  27.     {
  28.         if (list[i] == x)
  29.         {
  30.             F = i+1;
  31.             break;
  32.         }
  33.     }
  34.     return F;
  35. }
  36. string extract_skobki_from(string input_s)
  37. {
  38.     string answer = "";
  39.     for (int i = 0; i < input_s.length(); i++)
  40.     {
  41.         if ((input_s[i] == ':') && (i< input_s.length()-1) )
  42.         {
  43.             if (in_list(input_s[i + 1], R_skobki) || in_list(input_s[i + 1], L_skobki))
  44.             {
  45.                 i++;
  46.                 continue;
  47.             }
  48.         }
  49.         if (in_list(input_s[i], R_skobki) || in_list(input_s[i], L_skobki))
  50.         {
  51.             answer += input_s[i];
  52.         }
  53.     }
  54.     return answer;
  55. }
  56. int proverka_1(string input)
  57. {
  58.     string skobki = extract_skobki_from(input);
  59.     int close_availible = 0, answer = 0;
  60.     for (int i = 0; i < skobki.length(); i++)
  61.     {
  62.         if (in_list(skobki[i], L_skobki))
  63.         {
  64.             close_availible++;
  65.         }
  66.         else if (close_availible != 0)
  67.         {
  68.             close_availible--;
  69.         }
  70.         else
  71.         {
  72.             answer = 1;
  73.         }
  74.     }
  75.     return answer;
  76. }
  77. int proverka_3(string input)
  78. {
  79.     //если работает медленно то написать экстракт отдельно
  80.     int answer = 0;
  81.     int LEFT[4] = { 0 };
  82.     int RGHT[4] = { 0 };
  83.     for (int i=0;i<input.length();i++)
  84.     {
  85.         int in_Left = number_in_list(input[i], L_skobki);
  86.         if(in_Left)
  87.         {
  88.             LEFT[in_Left]++;
  89.         }
  90.         else
  91.         {
  92.             int in_Right = number_in_list(input[i], R_skobki);
  93.             if (in_Right)
  94.             {
  95.                 RGHT[in_Right]++;
  96.             }
  97.         }
  98.     }
  99.     for (int i = 1; i < 4; i++)
  100.     {
  101.         if (LEFT[i] != RGHT[i])
  102.         {
  103.             answer =3;
  104.             break;
  105.         }
  106.     }
  107.     return answer;
  108. }
  109. int proverka_2(string input)
  110. {
  111.     int answer = 0, N = input.length();
  112.     bool Need_to_brake=0;
  113.     int i = 0;
  114.     while (!Need_to_brake)
  115.     {
  116.         Need_to_brake = 1;
  117.         if (input[i] != 0)
  118.         {
  119.             Need_to_brake = 0;
  120.             bool truemeter = 0;
  121.             for (int k = i+1; k < N; k++)
  122.             {
  123.                 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))))
  124.                 {
  125.                     input[i] = 0;
  126.                     input[k] = 0;
  127.                     truemeter = 1;
  128.                     break;
  129.                 }
  130.                
  131.             }
  132.             if (!truemeter)
  133.             {
  134.                 answer = 2;
  135.                 break;
  136.             }
  137.            
  138.         }
  139.         i++;
  140.         if (answer)
  141.         {
  142.             break;
  143.         }
  144.     }
  145.     return answer;
  146. }
  147.  
  148.  
  149.  
  150. int main()
  151. {
  152.     int N;
  153.     cin >> N;
  154.     for (int t = 0; t < N+1; t++)
  155.     {
  156.        
  157.         int answ = 0;
  158.         string input;
  159.         getline(cin, input);
  160.         //input=input+" ";
  161.         string skobki = extract_skobki_from(input);
  162.         if (proverka_1(skobki))
  163.         {
  164.             answ = 1;
  165.  
  166.         }
  167.         else if ( proverka_2(skobki))
  168.         {
  169.             answ = 2;
  170.  
  171.  
  172.         }
  173.         else    if (proverka_3(skobki))
  174.         {
  175.             answ = 3;
  176.         }
  177.         if (t != 0)
  178.         {
  179.             cout << answ;
  180.         }
  181.     }
  182.     /*cout << proverka_1(skobki) << endl;
  183.     cout << proverka_3(skobki) << endl;
  184.     cout << proverka_2(skobki) << endl;*/
  185.    
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement