vlad7576

up08-2 (automata)

May 17th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <cctype>
  3.  
  4. int parse(const char c)
  5. {
  6.     size_t size = 1;
  7.     bool find_one = false;
  8.  
  9.     bool find_pattern = true;
  10.     bool flag_zero_pattern = true;
  11.  
  12.     int k = 1;
  13.     int m = 0;
  14.  
  15.     int counter_k = 0;
  16.     int counter_m = 0;
  17.     bool flag_zero = true;
  18.  
  19.     if (c != '0') {
  20.         return 0;
  21.     }
  22.  
  23.     char i;
  24.     while ((i = std::cin.get())) {
  25.         if (std::isspace(i) || i == EOF) {
  26.             std::cin.unget();
  27.             break;
  28.         }
  29.         size++;
  30.         if (find_pattern) {
  31.             if (i == '0') {
  32.                 if (flag_zero_pattern) {
  33.                     k++;
  34.                 } else {
  35.                     find_pattern = false;
  36.                     std::cin.unget();
  37.                     size--;
  38.                 }
  39.             } else if (i == '1') {
  40.                 find_one = true;
  41.                 m++;
  42.                 flag_zero_pattern = false;
  43.             } else {
  44.                 return 0;
  45.             }
  46.         } else {
  47.             if (i == '0') {
  48.                 if (counter_k < k && flag_zero) {
  49.                     counter_k++;
  50.                 } else {
  51.                     return 0;
  52.                 }
  53.             } else if (i == '1') {
  54.                 if (counter_k == k && flag_zero) {
  55.                     flag_zero = false;
  56.                 }
  57.  
  58.                 if (counter_m < m && !flag_zero) {
  59.                     counter_m++;
  60.                 } else {
  61.                     return 0;
  62.                 }
  63.  
  64.                 if (counter_m == m && !flag_zero) {
  65.                     counter_k = 0;
  66.                     counter_m = 0;
  67.                     flag_zero = true;
  68.                 }
  69.             }
  70.         }
  71.     }
  72.     return find_one && !(size % (k + m));
  73. }
  74.  
  75. int main()
  76. {
  77.     char c;
  78.     while ((c = std::cin.get()) != EOF) {
  79.         if (std::isspace(c)) {
  80.             continue;
  81.         } else {
  82.             int ans = parse(c);
  83.             std::cout << ans << std::endl;
  84.             while ((c = std::cin.get())) {
  85.                 if (isspace(c)) {
  86.                     break;
  87.                 } else if (c == EOF) {
  88.                     return 0;
  89.                 }
  90.             }
  91.         }
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment