#include #include std::vector file; void load_data() { int amount; std::cin >> amount; for (int i = 0; i < amount; i++) { char c; std::cin >> c; file.push_back(c); } /*char c; while(std::cin >> c) { file.push_back(c); }*/ } int subsequences() { if (file.size() < 9) return 0; int subsequences_count = 0; int actual_size = 3; for (int color_schemes = 0; color_schemes < 2; color_schemes++) { actual_size = 3; //int color_in = color_schemes; //int color_out = (color_schemes == 0) ? 1 : 0; char color_in = (color_schemes == 0) ? 'X' : 'O'; char color_out = (color_schemes == 0) ? 'O' : 'X'; while (true) { size_t needed_files = actual_size * actual_size; if (needed_files > file.size()) break; int needed_in_color = (actual_size - 2) * (actual_size - 2); int needed_out_color = needed_files - needed_in_color; //std::cout << "actual_size: " << actual_size << '\n'; int in_color_counter = 0; int out_color_coutner = 0; int i = 0; for ( ; i < needed_files; i++) { if (file[i] == color_in) in_color_counter++; if (file[i] == color_out) out_color_coutner++; } if (needed_in_color == in_color_counter && needed_out_color == out_color_coutner) subsequences_count++; for ( ; i < file.size(); i++) { if (file[i - 1] == color_in) in_color_counter--; if (file[i - 1] == color_out) out_color_coutner--; if (file[i] == color_in) in_color_counter++; if (file[i] == color_out) out_color_coutner++; /*for (int j = i; j < i + needed_files; j++) { if (file[j] == color_in) in_color_counter++; if (file[j] == color_out) out_color_coutner++; }*/ /*std::cout << "needed_in_color: " << needed_in_color << '\n'; std::cout << "needed_out_color: " << needed_out_color << '\n'; std::cout << "in_color_counter: " << in_color_counter << '\n'; std::cout << "out_color_coutner: " << out_color_coutner << '\n';*/ if (needed_in_color == in_color_counter && needed_out_color == out_color_coutner) subsequences_count++; } actual_size++; } } return subsequences_count; } int main() { load_data(); std::cout << subsequences() << '\n'; /*for (int i = 0; i < file.size(); i++) { std::cout << file[i] << '\n'; }*/ return 0; }