Mô tả bài toán
Cho một ma trận kích thước n x m. Mỗi ô chứa giá trị từ 0 đến 9. Một cờ được coi là "sọc" nếu thỏa mãn:
- Mỗi hàng ngang chứa các ô cùng màu (cùng giá trị).
- Màu của các hàng liền kề phải khác nhau.
Nhiệm vụ: Kiểm tra xem ma trận cho trước có phải là cờ sọc hợp lệ hay không.
Ví dụ
Ma trận:
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 3 | 3 | 3 |
Kết quả: Hợp lệ (true).
Thuật toán
- Lấy số hàng n và số cột m.
- Khởi tạo biến
llưu màu của hàng trước (khởi tạo giá trị không hợp lệ, ví dụ 'm'). - Duyệt từng hàng i từ 0 đến n-1:
- Lấy màu của ô đầu tiên hàng i:
f = matrix[i][0]. - Kiểm tra toàn bộ hàng i: nếu có ô nào khác
fthì không hợp lệ. - Nếu màu hàng hiện tại
ftrùng với màu hàng trướclthì không hợp lệ. - Cập nhật
l = f.
- Lấy màu của ô đầu tiên hàng i:
- Trả về true nếu mọi hàng đều hợp lệ, ngược lại false.
Code C++
#include <bits/stdc++.h>
using namespace std;
bool solve(vector<vector<int>> matrix) {
int n = matrix.size();
int m = matrix[0].size();
char l = 'm';
bool res = true;
for (int i = 0; i < n; i++) {
char f = matrix[i][0];
for (int j = 0; j < m; j++) {
if (matrix[i][j] != f)
res = false;
}
if (l == f)
res = false;
l = f;
}
return res;
}
int main() {
vector<vector<int>> matrix = {{0,0,0}, {1,1,1}, {3,3,3}};
cout << solve(matrix) << endl;
return 0;
}
Đầu vào / Đầu ra
Input: {{0,0,0}, {1,1,1}, {3,3,3}}
Output: 1 (true)