/* Solution to Topcoder SRM 729, D2, 250-pointer. BrokenChessboard James S. Plank Fri Sep 7 14:00:20 EDT 2018 */ #include #include #include using namespace std; class BrokenChessboard { public: int minimumFixes(vector board); }; int BrokenChessboard::minimumFixes(vector board) { int r, c; int SW, SB; SW = 0; SB = 0; /* Loop through every square of the checkerboard. */ for (r = 0; r < board.size(); r++) { for (c = 0; c < board[r].size(); c++) { /* These squares will match the (0,0) square. So, if they are 'B', you need to add one to SW. Otherwise, you add one to SB. */ if ((r + c) %2 == 0) { if (board[r][c] == 'B') SW++; else SB++; /* These squares will match the (0,1) square. So, if they are 'B', you need to add one to SB. Otherwise, you add one to SW. */ } else { if (board[r][c] == 'W') SW++; else SB++; } } } /* Return the smaller of the two sums. */ return (SW < SB) ? SW : SB; }