#include #include #include #include #include #include #include #define WATCH(x) std::cout << (#x) << ": " << x << '\n'; struct Input { size_t O_count; size_t X_count; }; Input read_input() { size_t kzahozeni; std::cin >> kzahozeni; std::string input; std::cin >> input; size_t O = 0; size_t X = 0; for(auto c: input) { if(c == 'X') X++; else O++; } return {O,X}; } size_t findMoEdge(Input in) { if(std::min(in.X_count, in.O_count) > 20) { size_t tmp = in.O_count; in.O_count = in.X_count; in.X_count = tmp; } return std::floor(std::sqrt(in.O_count)); } size_t solve(Input in) { if(!in.X_count || !in.O_count) return 0; size_t Oedge = findMoEdge(in); size_t Xedge = Oedge + 2; size_t O_zbytek = in.O_count - Oedge*Oedge; //size_t X_potreba = Oedge*Oedge - Xedge*Xedge; size_t X_potreba = Xedge*Xedge - Oedge*Oedge; size_t X_zbytek = in.X_count - X_potreba; // WATCH(O_zbytek) // WATCH(X_zbytek) return 1 + O_zbytek + X_zbytek; } int main() { auto in = read_input(); // WATCH(in.O_count) // WATCH(in.X_count) std::cout << solve(in) << '\n'; return 0; }