#include #include using namespace std; struct tile{ int xCnt; int oCnt; tile(int x, int o): xCnt(x), oCnt(o){} tile() = default; }; int innerSize(int dim){ return (dim-2)*(dim-2); } int outerSize(int dim){ return ((dim*dim) - innerSize(dim)); } int main (){ int inputLen; cin >> inputLen; string text; cin >> text; int count = 0; vector tiles; tiles.emplace_back(0,0); tile LastTile; for (size_t i = 1; i <= (size_t) inputLen; ++i) { if(i == 1){ if(text[i-1] == 'X') tiles.emplace_back(1,0); else tiles.emplace_back(0,1); LastTile = tiles[1]; continue; } if(text[i-1] == 'X'){ tiles.emplace_back(LastTile.xCnt + 1,LastTile.oCnt); } else { tiles.emplace_back(LastTile.xCnt,LastTile.oCnt + 1); } LastTile = tiles[i]; } for (int dim = 3; dim*dim <= inputLen; ++dim) { int innerDim = innerSize(dim); int outerDim = outerSize(dim); for (size_t i = (dim*dim); i < tiles.size(); ++i) { if((tiles[i].xCnt - tiles[i-(dim*dim)].xCnt) == innerDim){ if((tiles[i].oCnt - tiles[i-(dim*dim)].oCnt) == outerDim) count++; } if((tiles[i].xCnt - tiles[i-(dim*dim)].xCnt) == outerDim){ if((tiles[i].oCnt - tiles[i-(dim*dim)].oCnt) == innerDim) count++; } } } cout << count << endl; return 0; }