Sol:
| #include <iostream> | |
| using namespace std; | |
| class mat { | |
| public: | |
| int m, n; | |
| int **board; | |
| int *rows; | |
| int *cols; | |
| int *diag; | |
| mat(int m, int n) { | |
| this->m = m; | |
| this->n = n; | |
| board = new int*[m]; | |
| for (int i = 0; i < m; i++) { | |
| board[i] = new int[n]; | |
| } | |
| rows = new int[m]; | |
| cols = new int[n]; | |
| diag = new int[2]; | |
| reset(); | |
| } | |
| void set(int i, int j, int c) { | |
| board[i][j] = c; | |
| } | |
| bool checkNumber(int number) { | |
| int col = (number -1) / 15; | |
| int i = 0; | |
| bool found = false; | |
| for (i = 0; i < m; i++) { | |
| if (board[i][col] == number) { | |
| rows[i]--; | |
| cols[col]--; | |
| if (i == col) | |
| diag[0]--; | |
| if (i == (n-col-1)) | |
| diag[1]--; | |
| found = true; | |
| board[i][col] = 0; | |
| break; | |
| } | |
| } | |
| if (found) { | |
| if (rows[i] == 0) | |
| return true; | |
| if (cols[col] == 0) | |
| return true; | |
| if (diag[0] == 0) | |
| return true; | |
| if (diag[1] == 0) | |
| return true; | |
| } | |
| return false; | |
| } | |
| bool isOnBoard(int i, int j) { | |
| return i >= 0 && i < m && j >= 0 && j < n; | |
| } | |
| void reset() { | |
| for (int i = 0; i < m; i++) { | |
| rows[i] = m; | |
| cols[i] = n; | |
| for (int j = 0; j < n; j++) | |
| board[i][j] = 0; | |
| } | |
| rows[m/2]--; // remove the guess for the center square | |
| cols[m/2]--; | |
| diag[0] = diag[1] = 4; | |
| } | |
| void print() { | |
| for (int i = 0; i < m; i++) { | |
| for (int j = 0; j < n; j++) { | |
| cout << board[i][j] << " "; | |
| } | |
| cout << endl; | |
| } | |
| cout << "rows: " << endl; | |
| for (int i = 0; i < m; i++) | |
| cout << rows[i] << " "; | |
| cout << endl; | |
| cout << "cols: " << endl; | |
| for (int i = 0; i < n; i++) | |
| cout << cols[i] << " "; | |
| cout << endl; | |
| cout << "diag: " << diag[0] << " " << diag[1] << endl; | |
| } | |
| ~mat() { | |
| for (int i = 0; i < m; i++) { | |
| delete [] board[i]; | |
| } | |
| delete [] board; | |
| delete [] rows; | |
| delete [] cols; | |
| delete [] diag; | |
| } | |
| }; | |
| int main() { | |
| int tc, m = 5, n = 5, number; | |
| int c; | |
| mat ticket(m, n); | |
| cin >> tc; | |
| while (tc--) { | |
| ticket.reset(); | |
| for (int i = 0; i < m; i++) | |
| for (int j = 0; j < n; j++) { | |
| if (!(i == 2 && j == 2)) { | |
| cin >> c; | |
| ticket.set(i, j, c); | |
| } | |
| } | |
| bool winner = false; | |
| int n = 0; | |
| for (int i = 0; i < 75; i++) { | |
| cin >> number; | |
| if (!winner) { | |
| winner = ticket.checkNumber(number); | |
| if (winner) { | |
| n = i + 1; | |
| } | |
| } | |
| //ticket.print(); | |
| } | |
| cout << "BINGO after " << n << " numbers announced" << endl; | |
| } | |
| } |
Không có nhận xét nào:
Đăng nhận xét